soy bastante novato en javascript, y dedico algo de tiempo tratando de crear objetos de espacio de nombres en js.Clase anidada en javascript, herencia de métodos privados
Ahora, eso es lo que estoy tratando de hacer:
MainObject = function() {
var privateVariable = "i'm private";
var privateMethod = function() {
// doSomething
}
this.publicMethod = function() {
// doPublicSomething
}
}
MainObject.prototype.nested = function() {
this.publicNestedMethod = function() {
// that's not working at all
this.privateMethod(privateVariable);
}
}
MyObject = new MainObject();
MyObject.publicMethod();
MyObject.publicNestedMethod();
Me trataron de incluir la clase anidada dentro de la primera, pero no está funcionando también si trato:
this.nested = function() {
var mainObject = this;
return {
publicNestedMethod = function() {
mainObject.privateMethod();
}
}
}();
Alguien puede ayudarme por favor? voy a perder mi mente en esto.
Phaedra.
lo que si: this.nested = function() { var privateNested = function() {} retorno { } }(); – Phaedra
Tendrá que agregar paréntesis alrededor de la función (declaración vs expresión, vea http://yura.thinkweb2.com/named-function-expressions/). Aparte de eso, es exactamente lo que es un cierre: estás encapsulando las variables locales utilizadas en el momento de creación de la función. Editó la respuesta para mostrar un ejemplo. –
Así que eso es lo que estaba buscando, creo. ¿o no? Me faltaba la parethesis .. – Phaedra