我想动态加载多个函数:
var str = "function foo() {} function bar() {}";
var functions = eval(???);
functions.foo();
这可以用eval完成吗?我只用一个功能才成功。
答案 0 :(得分:1)
使用eval。 Not recommended
var str = "function foo() { console.log('foo'); } function bar() { console.log('bar'); }";
eval(str);
foo();
您可以使用对象并将函数放入其中。您可以稍后添加具有赋值的函数。
var functions = {
foo: function () { console.log('foo'); },
bar: function () { console.log('bar'); }
};
functions.foo();
functions.baz = function () { console.log('baz'); }
functions.baz();
答案 1 :(得分:0)
使用functions.foo();
,您尝试访问对象foo
的属性functions
,这将为您提供undefined
。
您可以使用
之类的对象简单地替换函数字符串var functions = {
foo: function() {},
bar: function() {}
}
这也避免了eval()
的使用
现在,您可以使用functions.<functionName>;
访问每个媒体资源。您可以在JavaScript中动态地添加属性。因此,您的问题中eval
没有用例
var functions = {
foo: function() { console.log('foo') },
bar: function() { console.log('bar') }
}
function addNewFunction(object, functionName, functionImplementation) {
object[functionName] = functionImplementation
}
addNewFunction(functions, 'ok', function() { console.log('ok') })
functions.foo()
functions.ok()
&#13;
答案 2 :(得分:0)
eval
将执行某些字符串,但不会返回任何内容。因此functions
将为undefined
eval
也将在当前范围内运行给定的字符串。因此,解析的函数不一定会在全局范围内创建。
<强>示例:强>
var str = "function foo1() {console.log('foo1')} function bar1() {console.log('bar1')}";
var functions = eval(str);
console.log(functions);
foo1();
(function() {
var str = "function foo2() {console.log('foo2')} function bar2() {console.log('bar2')}";
var functions = eval(str);
foo2();
})()
try {
foo2();
} catch (ex) {
console.log(ex.message)
}
&#13;
我的建议是,创建一个新的JS文件并动态加载它。
答案 3 :(得分:0)
var foo =&#39;(function foo(){})&#39;
var bar =&#39;(功能栏(){})&#39;
使用变量声明函数,然后使用eval
var result = eval(foo)
结果变量获取foo()函数的结果