2015-09-26 2 views
0

У меня есть объект, например, так:Вызов метода с использованием строк

var x = { 
    "fx": function() {...} 
} 

У меня есть имя объекта (y = "x") и функции (z = "fx") и иметь их как строки.

Я знаю, что могу вызвать функцию посредством использования Eval по следующему способу или аналогично:

eval(y.z) 

Однако, я хотел бы, чтобы избежать использования Eval для достижения этой цели. Я знаю, что метод прототипа apply принимает функцию и применяет ее к объекту, однако поиск ссылки на функцию невозможно, поскольку функция содержится внутри объекта.

Я знаю, что эта проблема не новая и, следовательно, должна иметь решение, но я не могу ее найти. Любая помощь будет оценена по достоинству.

+1

Почему вы назначаете 'у = "х" '? Вы можете использовать 'x [z]()', 'eval' is bad и его следует избегать – Tushar

+0

Я просто использую это, чтобы представить, что имя объекта является строкой; Я не использую eval каким-либо образом или формой. – Carey

ответ

2

Вы можете использовать

x[y]() 

вызвать функцию с переменной

+0

Это правильно, спасибо. Я хотел бы отметить для будущих читателей, что объект может быть получен с помощью 'window [x]'. – Carey

+0

@Saikyr только в том случае, если объект определен в глобальной области – nils

+0

Это правильно, угадать, что вам нужно будет привязать ссылки из глобальной области к правильной области. – Carey

0

То, что я понял, что у и г некоторые переменные, и вы хотите вызвать г метод у объекта с помощью этих переменные.

Это может быть сделано различными способами. Например:

(function() { 
x = { 
    "fx": function() { 
     alert("Hey!"); 
    } 
} 
    y = "x"; 
    z = "fx"; 
    this[y][z](); 
}()); 

DemoFiddle