2012-03-24 4 views
61

Могу ли я динамически вызывать метод объекта с именем метода в виде строки? Я предположил бы, что это так:Javascript динамически вызывать метод объекта из строки

var FooClass = function() { 
    this.smile = function() {}; 
} 

var method = "smile"; 
var foo = new FooClass(); 

// I want to run smile on the foo instance. 
foo.{mysterious code}(); // being executed as foo.smile(); 

ответ

143

, если имя свойства хранится в переменной, используйте []

foo[method](); 
+0

Спасибо, ребята, это было так просто, я полностью его не замечал. Уже искал магические функции и трюки. –

+7

Вы легенда! – Subtletree

+0

Короткий и лаконичный! –

24

Свойства объектов могут быть доступны через нотации массива:

var method = "smile"; 
foo[method](); // will execute the method "smile" 
-2

способ можно позвонить с eval eval("foo." + method + "()"); не может быть очень хорошим способом.

+0

http://stackoverflow.com/questions/197769/when-is-javascripts-eval-not-evil –

+8

У меня было ошеломляющее чувство, что что-то не так с злым eval .. – hakovala

+0

это просто другое решение, почему downvote. –

Смежные вопросы