[英]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.