2011-02-25 29 views
6

Creo que me falta algo muy simple aquí. Quiero pasarle a una función un objeto y el método para llamar. Las razones por las cuales son demasiado largas para esta publicación. :-)Cómo invoco dinámicamente el método de un objeto de JavaScript

var myObj = new someObject(); 
var funcName = "hide"; 

function callObject(myObj,funcName){ 
    obj.hide(); //this works  
    obj[funcName]; //doesn't work 
    obj.eval(funcName); //doesn't work either.. tried many variations 
} 

¡Gracias!

Respuesta

15

Usted necesita el paréntesis en la llamada, así:

obj[funcName](); 

Puede obtener eval para trabajar de esta manera:

eval("obj." + funcName + "()"); 

pero hay muchas razones para no hacerlo (security, performance, harder debugging) .

+0

¡Gracias! Sabía que me estaba perdiendo algo simple. Realmente pensé que probé obj [funcName]() antes, pero ahora está funcionando para mí. – David

+2

Sin embargo, use 'eval' con cuidado :) http://stackoverflow.com/questions/86513/why-is-using-javascript-eval-function-a-bad-idea –

+0

Ver [mi comentario] (http://stackoverflow.com/questions/5112793/how-do-i-dynamically-call-a-javascript-objects-method/5112938#5112938) sobre la seguridad de usar eval y otras opciones sin eval. Además, además de ser inseguro, eval puede ser muy ineficiente, especialmente cuando se realiza una validación de entrada adecuada, pero incluso sin validación se llama al compilador cada vez que se ejecuta. – rsp

1

Al tratar con obj[funcName](); tiene que encargarse de la instancia del objeto. si desea usar una propetry privada del objeto dentro de la llamada de función, la usará como si fuera una propiedad estática.

Cuestiones relacionadas