鉴于以下内容:
include.js
module.exports = function() {
...
return {
func: function(val) {
return Function('return ' + val + ';');
}
}
}()
running.js
var outer = function() {
var include = require('./include.js');
var x = include.func('eq');
console.log(x(5, 5));
}
outer()
...我会把function eq(x, y){ return x === y; }
放在哪里这会有效?我正在调用该函数的行上获得eval at <anonymous>
;在这种情况下为x(5,5)。
当eq
位于include.js
或running.js
时,我不知道这是示例代码是从我的项目中获取并且非常含糊......但是,如果可能的话,那个功能会去哪里?
OR
...定义一个函数对象会更好,其中键是函数的名称吗?
defaultFuncs = {
'eq': function(x, y){ return x === y; }
}
答案 0 :(得分:2)
通过new Function
创建的父函数范围是全局范围,而不是任何本地或模块范围。所以
global.eq = function(a,b) { return a==b };
function func(name) { return Function("return "+name+";"); }
var x = func("eq");
var equals = x();
equals(5, 5) // true
应该有用。
...定义一个函数对象会更好,其中键是函数的名称吗?
肯定是的。