Javascript Function Constructor из String не запускается - PullRequest
1 голос
/ 23 марта 2011

Может ли кто-нибудь помочь мне понять, почему новая функция здесь не работает?

var fn = data["callback"]; // String with value: function() { anotherFunctionToRun(); }
var foo = new Function("return ("+fn+")");
foo();

alert(foo) // returns function anonymous() { return function () {anotherFunctionToRun();}; }
alert(foo()) // function () { anotherFunctionToRun(); }

foo(); // Wont do anything

Что-то не так с моим синтаксисом?

Ответы [ 2 ]

2 голосов
/ 23 марта 2011

Ваш вызов foo () просто возвращает объект функции, но не вызывает его. Попробуйте это:

Foo () ();

0 голосов
/ 23 марта 2011

Вы создаете foo как функцию, которая возвращает другую функцию.Каждый раз, когда вы выполняете foo(), он возвращает функцию.

foo(); // returns a function, but appears to do nothing

alert(foo) // prints definition of foo, which is the complete function body
alert(foo()) // shows you the function body of the function returned by foo

foo(); // returns a function, but appears to do nothing

Чтобы запустить anotherFunctionToRun, вам нужно будет выполнить возвращенную функцию:

var anotherFoo = foo();
anotherFoo(); // should execute anotherFunctionToRun

Или просто нене оборачивайте код data["callback"] в функцию, возвращающую функцию для начала.

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