2016-02-17 2 views
0

Предположим, у меня есть что-то вроде этоговызов метода функции с использованием [] в javascript вместо. Оператор

var foo = {}; 
foo.name = "Hello"; 
foo.someMethod= function(){ 
    console.log("SomeMethod called"); 
} 

console.log("Use [ ] operator : " + foo["name"]); 
console.log("Use dot notation : " + foo.name); 

foo.someMethod(); //This works. 
foo[someMethod](); //Why does this not work 

Мой вопрос, почему не работает последнее утверждение? Может ли метод не вызываться через [] операторов?

+0

У вас есть кавычки в 'foo [" name "]', но не в 'foo [someMethod]', почему? – georg

+1

При использовании квадратных скобок бит в скобках является выражением, поэтому он оценивается и * someMethod * обрабатывается как идентификатор. Таким образом, движок скриптов ищет переменную * someMethod *, чтобы получить ее ценность и не может ее найти. – RobG

+0

'foo [someMethod]()' не работает по той же причине, что 'foo [name]' не работает. – Barmar

ответ

3

Вам нужны в кавычках someMethod

foo['someMethod'](); будут работать.

3

Потому что someMethod будет интерпретироваться как идентификатор. В области не существует идентификатора, называемого someMethod. Если вы исследуете выход консоли вы увидите выразительную ошибку:

Uncaught ReferenceError: someMethod is not defined

Вы должны использовать его как этот foo["someMethod"]();

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