Объясните пожалуйста, кто знает, чем отличается этот код: function Button() { this.cc = 0; this.clicked = function() { this.cc+=1; console.log('Clicked ' + this.cc); } } От вот этого: function Button() { this.cc = 0; } Button.prototype.clicked = function() { this.cc+=1; console.log('Clicked ' + this.cc); }
Ответ
Внешне - ничем не отличает.
Но внутренне, для случая:
function Button() {
this.cc = 0;
this.clicked = function() {
cc+=1;
console.log('Clicked ' + this.cc);
}
}
(new Button()).clicked != (new Button()).clicked
И это реально разные ( почти всегда полностью ) функции, с разным контекстом исполнения, и т.д и т.п...
P.S: В принципи, это можно назвать private свойствами:
function Button(){
var obj_private = {},
obj_fn = [],
obj = this;
for( var fn in this ){
if ( typeof this[ fn ] === 'function' ){
obj_fn.push( this[ fn ] );
}
}
this.get_private = function (){
if (
( this == obj ) &&
( obj_fn.indexOf( arguments.caller.callee ) != -1 )
){
return private_obj;
}
}
}
Button.prototype.clicked = function (){
var pr = this.get_private();
pr[ cc ]++;
console.log( 'Clicked' + pr[ cc ] );
}
Комментариев нет:
Отправить комментарий