Javascript 访问JS函数的私有方法
我有以下javascript代码Javascript 访问JS函数的私有方法,javascript,function,constructor,javascript-objects,Javascript,Function,Constructor,Javascript Objects,我有以下javascript代码 function MyFunc () { var add = function () { return "Hello from add"; }; var div = function () { return "Hello from div"; }; var funcCall = function (obj) { if (!obj) { th
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})时当传递code>时,它应该调用函数private functionadd
或当lol.func({fName:div})时传递代码>时,它应该调用private div函数。我试过的不起作用。我怎样才能做到这一点
在这种情况下,最好将内部函数存储在对象中,以便使用变量名轻松访问该函数。所以如果你定义一个函数“映射”
您可以使用方法[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
我想只有eval
可以做你想做的事情,而不需要更新你的代码。@Kyll这不是我要求的:)
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});