2011-10-04 30 views
7

Tengo un nombre de función en una cadena:¿Función de llamada desde cadena dentro del objeto?

var func = "doTest"; 

necesito esta función para ser aplicado a la instancia actual ("este");

por eso es necesario que para llamar:

this.doTest(); 

¿Cómo puedo hacer esto? No puedo ir por la ventana

Gracias, Wesley

Respuesta

22

sólo tiene que utilizar el constructo de object[functionName]();, así:

function Person() {}; 
Person.prototype.speak = function() { alert('ohai'); }; 
var john = new Person, action = 'speak'; 

john[action](); 

estilo alternativo:

var Person = { 
    speak: function() { alert('ohai'); }, 
    speakDelegate: function() { var action = 'speak'; this[action](); } 
}; 
Person.speakDelegate(); 
+0

this.apply (func) no parece trabajo, ¿es eso incorrecto? – Wesley

+0

Actualicé mi respuesta. Si eso aún no es suficiente, por favor denos más detalles. ¿A qué se refiere 'this'? ¿Estás lidiando con un objeto jQuery? más información. –

3

Pruebe lo siguiente

var funcObj = this["doTest"]; 
funcObj.apply(this); 

Lo que esto hace es agarrar el miembro nombrado doTest de this. A continuación, ejecuta la función a través de apply y le dice a javascript que enlace this como this dentro de la función. Creo que el ejemplo es un poco menos confuso si se tiene en cuenta el mismo código en un no-este valor

var obj = { 
    doTest: function() { 
    console.log("doTest called"); 
    } 
}; 

var doTestFunc = obj["doTest"]; 
doTestFunc.apply(obj); 

En este caso el método doTest se ejecutará con el valor obj como this

0

Si está usando jQuery que sólo puede hacer:

$(this)[func]() 
6
this[func](); 

No hay necesidad de .call o .apply ya que el contexto se mantiene en la referencia.

Por ejemplo:

var obj = { 
    doTest: function(){ console.log(this); }, 
    fn: function(){ var name='doTest'; this[name](); } 
}; 
obj.fn(); // logs the object, proving this has the correct context. 
Cuestiones relacionadas