Вызов функции из строки внутри объекта? - PullRequest
7 голосов
/ 04 октября 2011

У меня есть имя функции в строке:

 var func = "doTest";

Мне нужно, чтобы эта функция была применена к текущему экземпляру ("this");

Так что мне нужно вызвать его:

 this.doTest();

Как я могу это сделать?Я не могу пройти через окно.

Спасибо, Уэсли

Ответы [ 4 ]

22 голосов
/ 04 октября 2011

Просто используйте конструкцию object[functionName]();, например:

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

john[action]();

Альтернативный стиль:

var Person = {  
  speak: function() { alert('ohai'); }, 
  speakDelegate: function() { var action = 'speak'; this[action](); } 
};
Person.speakDelegate();
6 голосов
/ 04 октября 2011
this[func]();

Нет необходимости .call или .apply, поскольку контекст содержится в ссылке.

Например:

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.
3 голосов
/ 04 октября 2011

Попробуйте следующее

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

Для этого нужно получить элемент с именем doTest из this.Затем он выполняет функцию через apply и сообщает javascript связать this как this внутри функции.Я думаю, что пример будет немного менее запутанным, если вы рассмотрите тот же код для не-этого значения

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

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

В этом случае метод doTest будет выполнен со значением obj как this

0 голосов
/ 04 октября 2011

Если вы используете jquery, вы можете просто сделать:

$(this)[func]()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...