Переменные методы в объектах Javascript - PullRequest
0 голосов
/ 10 августа 2011

Я хочу проверить существование метода JavaScript, когда внутри меня есть переменная с именем этого метода.

Используя PHP, я мог бы сделать это:

$method = 'bar';
$object = new Foo;
if(method_exists($object, $method))
{
    //Foo->bar()
}

Как я могу сделать это в JavaScript? Моя первая попытка не удалась:

var method = 'bar';
if(typeof(obj.method) != "undefined")
{
    obj.method();
}
else
{
    obj.default();
}

Ответы [ 5 ]

7 голосов
/ 10 августа 2011

Проверьте, является ли свойство typeof "function", используя method в качестве ключа для объекта obj:

((typeof obj[method] === "function") ? obj[method] : obj.default)();
4 голосов
/ 10 августа 2011

Я обычно просто делаю if(obj.method) {...}, но вы всегда можете использовать попытку / поймать:

try {
    obj.method();
} catch(e) {
    // obj or obj.method didn't exist, so let's try plan b
    obj.planB();
}
2 голосов
/ 10 августа 2011
  (obj[method] || obj.default)();

тоже сработает, если вы хотите в одну строку.

1 голос
/ 10 августа 2011

['blah'] и .blah эквивалентны в объекте Javascript, поэтому вы можете вызывать свой метод как

obj[method]();

Где метод - это строка, содержащая имя метода для вызова.

0 голосов
/ 10 августа 2011

Для свойства method объекта должно быть typeof как function .Например,

 if (typeof(obj[method]) == "function") {
   obj[method]();
 }

Вот JSFiddle , объясняющий, как проверить функцию.

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