Как мне вернуть eval(code) и вернуть объект с помощью JavaScript?

У меня есть этот кусок кода. Я хочу, чтобы он загружал файл .js, а затем запускал его. wКогда он запускается, я хочу, чтобы он возвращал параметр или, что еще лучше, объект.

Это код на моей странице

var runCode = function(){
    var xhr=new XMLHttpRequest();
    xhr.open('GET','io.js',false);
    xhr.send();
    return eval(xhr.responseText);
};

А это is.js

var IO = new function(){
    this.run = true;
    return 'io';
};
return IO

Но когда я запускаю его, я получаю «Uncaught SyntaxError: Illegal return statement» в консоли.


person Tim P.    schedule 09.10.2010    source источник


Ответы (4)


Еще одно решение, которое я нашел, состоит в том, чтобы инкапсулировать вашу строку для eval внутри функции, что довольно просто.

return eval("(function() {" + xhr.responseText + "})();");
person André Leria    schedule 23.09.2013

Вы не можете использовать return вне функции. Но чтобы вернуть значение из eval, вы можете использовать следующий синтаксис:

eval('var IO = function(){this.run = true; return "io";};{IO};')
person Gaurav Saxena    schedule 09.10.2010
comment
Не могли бы вы просто использовать IO; в качестве последнего утверждения? Брекеты не так уж и нужны. - person Delan Azabani; 11.10.2010
comment
да, использование только ввода-вывода тоже работает. Я пытался написать это как объект, чтобы eval вернул его. - person Gaurav Saxena; 11.10.2010
comment
Вот что сделал {IO} в конце. Хороший ответ. - person SomeShinyObject; 15.01.2013

Проблема в том, что вы не можете вернуться за пределы функции. Что вам нужно, так это return IO; из вашей runCode функции после завершения запроса.

person Delan Azabani    schedule 09.10.2010

Удалите оператор new

var IO = function(){ 
    this.run = true; 
    return 'io'; 
}; 
return IO 
person Bang Dao    schedule 09.10.2010