Aquí hice dos objetos; uno tiene métodos de acceso creados en el constructor, el otro en el prototipo. ¿Por qué elegir uno de estos sobre el otro?Prototipo vs. No, ¿qué son los beneficios?
function spy1(name){
this.name = name;
var secret;
this.setSecret = function(message){
secret = message;
};
this.getSecret = function(){
return secret;
};
}
function spy2(name){
this.name = name;
this.secret;
/* (see comment) was:
var secret;
*/
}
spy2.prototype.setSecret = function(message){
this.secret = message;
/*was:
secret = message;
*/
};
spy2.prototype.getSecret = function(){
return this.secret;
/*was:
return secret;
*/
};
bond = new spy1("007");
smart = new spy2("86");
bond.setSecret("CONTROL is a joke.");
smart.setSecret("The British Secret Service is for sissies.");
Tenga en cuenta que en su prototipo de caso, está (presumiblemente inadvertidamente) creando una variable global implícita 'secret' que no tiene nada que ver con la variable declarada (y no utilizada)' secret' en su función de constructor. Esa variable global (una propiedad del objeto global), al ser global, será compartida por todas las instancias de 'spy2', que supongo que no es lo que estabas tratando de hacer. –
Gracias. Eso fue de hecho inadvertido. Cambié el código; ¿Es esto correcto ahora? Entonces, realmente, un prototipo no puede modificar las variables privadas del objeto. –