我有以下javascript代码
function MyFunc () {
var add = function () {
return "Hello from add";
};
var div = function () {
return "Hello from div";
};
var funcCall = function (obj) {
if (!obj) {
throw new Error("no Objects are passed");
}
return obj.fName();
};
return {
func: function (obj) {
funcCall(obj);
}
};
}
var lol = new MyFunc();
当传递lol.func({fName: add});
时,它应该调用函数private function add
,或者当传递lol.func({fName: div});
时,它应该调用私有div函数。我尝试过的东西不起作用。我怎样才能做到这一点。
答案 0 :(得分:3)
在这种情况下,最好将内部函数存储在对象中,以便可以使用变量名称轻松访问它。所以如果你定义一个函数“map”
var methods = {
add: add,
div: div
};
您可以使用methods[obj.fName]();
调用它。
完整代码:
function MyFunc() {
var add = function () {
return "Hello from add";
};
var div = function () {
return "Hello from div";
};
var methods = {
add: add,
div: div
};
var funcCall = function (obj) {
if (!obj) {
throw new Error("no Objects are passed");
}
return methods[obj.fName]();
};
return {
func: function (obj) {
return funcCall(obj);
}
};
}
var lol = new MyFunc();
console.log( lol.func({fName: 'add'}) );
答案 1 :(得分:0)
传递lol.func({fName: add})
时,在评估此代码的范围内解决了add,而不是MyFunc
的范围。您必须在该范围内定义它,如:
function MyFunc () {
var add = function () {
return "Hello from add";
};
var div = function () {
return "Hello from div";
};
var funcCall = function (obj) {
if (!obj) {
throw new Error("no Objects are passed");
}
return obj.fName();
};
return {
add: add,
div: div,
func: function (obj) {
funcCall(obj);
}
};
}
var lol = new MyFunc();
lol.func({fName: lol.add});
或使用eval
。