Foros del Web » Programando para Internet » Javascript »

Conocer objeto propietario original de función cuando ésta se ejecuta

Estas en el tema de Conocer objeto propietario original de función cuando ésta se ejecuta en el foro de Javascript en Foros del Web. Hola chic@s: Desearía saber si conocéis un método práctico y bien gestionado para conocer el objeto propietario de cierta función cuando ésta se ejecuta bajo ...
  #1 (permalink)  
Antiguo 18/03/2008, 09:50
Avatar de Negora  
Fecha de Ingreso: agosto-2003
Mensajes: 122
Antigüedad: 20 años, 8 meses
Puntos: 5
Conocer objeto propietario original de función cuando ésta se ejecuta

Hola chic@s:

Desearía saber si conocéis un método práctico y bien gestionado para conocer el objeto propietario de cierta función cuando ésta se ejecuta bajo el scope de otro.

Por ejemplo, si hacemos:

Código:
function Obj1 () {
}

     Obj1.prototype.myFunc = function () {
          alert (this);
     }

var obj1 = new Obj1 ();
obj1.myFunc ();
"myFunc" nos devuelve el objeto que contiene dicha función, que es una instancia de la clase "Obj1". Sin embargo, si hacemos esto otro:

Código:
function Obj1 () {
}

     Obj1.prototype.myFunc = function () {
          alert (this);
     }

var obj1 = new Obj1 ();
var myfunc = obj1.myFunc;
myfunc  ();
Lo que nos devolverá será el objeto window, ya que la función se ejecuta en el "scope" de la ventana, y no en el del objeto, por lo que la palabra clave "this" ya no cumple la función que esperábamos para este caso, evidentemente.

Desearía saber si existe alguna manera de averiguar el objeto que originalmente contiene la función, desde dentro de esta misma.

He probado a usar el objeto "arguments" en tiempo de ejecución desde dentro de la función, pero lo más que logro es una referencia a la propia función a través de la propiedad "arguments.calle".

También he de decir que aunque en este caso llamar a "obj1" me serviría, porque es una variable global que sabemos que existe, en un caso general no serviría, pues desconoceríamos su nombre.

Muchas gracias.


PD: Por cierto, en mi caso personal (mucho más complejo) tampoco me sirve ejecutar la función en el scope correspondiente, usando "call" o "apply", ya que lo único que conozco es la función en sí (la recibo como parámetro de una función), no el objeto.

Última edición por Negora; 18/03/2008 a las 10:03
  #2 (permalink)  
Antiguo 18/03/2008, 12:54
Avatar de Negora  
Fecha de Ingreso: agosto-2003
Mensajes: 122
Antigüedad: 20 años, 8 meses
Puntos: 5
Re: Conocer objeto propietario original de función cuando ésta se ejecuta

Me autorrespondo por si a alguien le surge la misma duda en un futuro y da con este hilo. Parece ser que en JavaScript NO es posible.

Cuando una función se ejecuta, toma el objeto contenedor como scope de variables por defecto y es a partir de él, usando "this", como el desarrollador puede acceder a otras propiedades y métodos del mismo objeto. Si el "scope" es modificado intencionadamente (como en el ejemplo de arriba), "this" varía y no hay modo intrínseco de averiguar cuál es el objeto que originalmente contiene la función. Por decirlo de algún modo, las funciones son independientes de su contenedor, pero no del scope que se le aplica.

Así que nada, ya me he replanteado mi clase de una manera diferente ;) .
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:08.