Ver Mensaje Individual
  #6 (permalink)  
Antiguo 31/10/2012, 08:58
Avatar de zerokilled
zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Problema con metodo en clases...

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.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 31/10/2012 a las 15:34 Razón: corrección en comentario