Ver Mensaje Individual
  #6 (permalink)  
Antiguo 14/05/2007, 17:28
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 2 meses
Puntos: 45
Re: Como sabes la existencia de un método en una Clase?

La verdad, me he perdido :(

Al hacer
a.prototype.b=Function("return 'hola'");
Lo que haces es asignarle una propiedad a a.prototype, o a una instancia de a (new a()) no a a, por eso a.b no funciona.

Cuando lo instancias (new a()) entonces sí que los métodos (funciones de a) funcionan, al instanciarlo podemos utilizar el prototype directamente. PERO SÓLO DIRECTAMENTE: Es decir, no podemos poner new a().prototype.b, pero sí a.prototype.b; sin embargo a.b NO funciona (porque no es instancia) mientras que new a().b sí (al instanciarlo, sí).


No sé si he llegado a algo en claro, o me he liado más:
Código PHP:
function e(q,noBr) {
    
document.body.appendChilddocument.createTextNode(q) );
    if(!
noBrdocument.body.appendChilddocument.createElement("BR") );
}

var 
= function(){ }
a.prototype.b=Function("return 'hola'");  
a.c=Function("return 'adios'");
try { 
e("a.b = "+a.b); } catch(error) { e("Lo siento, a.b no se puede hacer: "+error.message); }
try { 
e("new a().b = "+new a().b); } catch(error) { e("Lo siento, new a.b() no se puede hacer: "+error.message); }
try { 
e("a.c = "+a.c); } catch(error) { e("Lo siento, a.c no se puede hacer: "+error.message); }
try { 
e("new a().c = "+new a().c); } catch(error) { e("Lo siento, new a().c no se puede hacer: "+error.message); }
e("");
try { 
e("a.prototype.b = "+a.prototype.b); } catch(error) { e("Lo siento, a.prototype.b no se puede hacer: "+error.message); }
try { 
e("a.prototype.c = "+a.prototype.c); } catch(error) { e("Lo siento, a.prototype.c no se puede hacer: "+error.message); }
try { 
e("new a().prototype.b = "+new a().prototype.b); } catch(error) { e("Lo siento, new a().prototype.b no se puede hacer: "+error.message); }
try { 
e("new a().prototype.c = "+new a().prototype.c); } catch(error) { e("Lo siento, new a().prototype.c no se puede hacer: "+error.message); } 
CONCLUSIÓN: Cuando a no está instanciado, y algo está declarado mediante prototype (b), debemos llamarlo con .prototype. Al instanciarlo lo llamaremos directamente, sin prototype, como objeto (o método) de la instancia.
Al declararlo sin prototype (c), queda declarado como "propiedad directa" de a, y nada más: Accederemos a ella directamente. Instanciado no habrá manera de llegar hasta c.




Creo que estoy liando la marrana más...



Un saludo MaBoRaK, y explicame mejor ese
Cita:
Iniciado por MaBoRaK
Pero quiero evitar tener que crear la variable ALGO en memoria....hago una aplicación "muy pesada".
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.