[英]Accessing private methods of a JS Function
我有以下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函数。 我尝试过的东西不起作用。 我怎样才能做到这一点。
在这种情况下,最好将内部函数存储在对象中,以便可以使用变量名称轻松访问它。 所以如果你定义一个函数“map”
var methods = {
add: add,
div: div
};
你可以使用methods[obj.fName]();
调用它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'}) );
当您传递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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.