bueno, tu confusión te tiene en un estado de locura, es lo único que tengo claro.
si bien para hacer un método público se declara con
this y para hacerlo privado se declara con
var. ahora bien, tengase claro que esa asociación a sido atribuida como una forma de ver la implementación de clases en javascript. pues
var en realidad es para declarar una variable de ámbito local. pero debido a ciertas características del lenguaje, se nos permite emular las clases u otra cosa. veamos.
Código:
function Klass(){
this.public = function(){ return "me acabas de invocar, ¿qué quieres?"; };
this.publicMember = "soy feo, pero no me molestes =(";
this.privileged = function(){ return private() +", "+ privateMember; };
var privateMember = "no me puedes tocar! =þ";
function private(){ return "soy el agente privado 007"; }
}
/* para probar en consola */
var k = new Klass();
k.public(); // "me acabas de ...";
k.publicMember; // "soy feo, ...";
k.private(); // se levanta una excepción porque no existe un miembro público llamado private;
k.privateMember; // devuelve undefined porque ese miembro no esta declarado;
k.privileged(); // "soy el agente ...";
en este ejemplo tienes tres miembros públicos y dos privados. los miembros privados no se pueden accesar desde el exterior. uno de los miembros públicos se le dice privilegiado porque tiene acceso a los miembros privados. si ese miembro privilegiado no existiera, en circunstancias normales lo que sucedería es que al finalizar la ejecucción del constructor
Klass las variables locales se destruyen. pero en este ejemplo, al existir un método público que tiene acceso a los miembros privados, estos no se destruyen. eso es lo que se conoce como closure, la metodología de encapsulación en javascript. es a través de esta técnica que se implementa el concepto de clases en javascript.
Cita: Actualización: Eh estado "jugando" con esto de los "metodos locales o privados" y ahora eh notado un ...
hay una diferencia muy grande entre
window[callback] y
callback.apply. en el primero se asume dos cosas: primero y más importante que la declaración del callback está definida en el ámbito de
window o lo mismo que en el entorno global. y segundo que el parámetro
callback es un string. recuerda que esta sintaxis
object[string] es una forma alterna a
object.property. el segundo caso,
callback.apply se entiende que el parámetro es una referencia a la función en si. es decir, que al invocar la función entre los argumentos debes pasar una referencia de una función.