2009-07-29 7 views
3

Я знаю, PHP имеет call_user_func, мне было просто интересно, если JavaScript было что-то подобное, где метод, который я хочу назвать это, например: object.set$fieldID($fieldValue)Что такое более безопасная альтернатива eval(), когда я просто хочу вызвать функцию?

Я предпочел бы не пройти, если/другое/переключения блоков только для выполнения одна строка кода.

Если это помогает, я использую jQuery.

ответ

9
object["set" + $fieldID]($fieldValue); 

Некоторые материалы для чтения для выше: Member Operators на MDC.

Некоторые усовершенствованные методы включают Function.prototype.call и Function.prototype.apply. Первый - как-то эквивалентен PHP call_user_func(), а последний как-то эквивалентен PHP call_user_func_array().

Разница между функциями PHP и JavaScript заключается в том, что JavaScript позволяет вызывать методы какого-либо объекта в контексте другого объекта. Это делается с использованием первого аргумента call() и apply().

Эквивалентные для приведенного выше примера, но с использованием call() и apply() выглядит следующим образом:

object["set" + $fieldID].call(object, $fieldValue); 
object["set" + $fieldID].apply(object, [$fieldValue]); 

Первый аргумент должен быть object в противном случае метод будет выполнен с this указателем, связанным с глобальным объектом, window в случае браузеров.

+0

Вы сударь, алмаз странностями. Благодарю. –

4

@ lonut правильный. В более общем плане, хотя, если вы хотите, чтобы вызывать функции, которые не являются частью явного объекта (например .: глобальный), вы можете вызвать их на window объекта:

var foo = function() { alert(1); }; 
window['foo'](); 

, поскольку все объекты содержатся в window.

Другой пример:

var object = function() { this.method = function() { alert(2); }; } 
var instance = new object(); 
window['instance']['method'](); 
+1

Да, вызов глобальных функций с помощью 'window' или что-то вроде' this ['foo'](); '(когда глобальный объект не называется' window') полезен. +1 –

+0

Спасибо за дополнительную информацию :) –

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

  • Нет связанных вопросов^_^