如果你有类似的东西:
var ASK = (function (){
var i = 0, _this = this;
function private(){
console.log(i++)
}
return {
call : function (methodName, args){
eval(methodName + '(' + args + ')' );
}
}
})();
ASK.call('private');
可以在不使用eval的情况下调用ASK范围内的函数吗?为什么当我尝试使用_this[method]()
时,我发现它不是一个功能? _this
不应该引用ASK = (function(){})
内的范围吗?
答案 0 :(得分:3)
使用对象:
var ASK = (function (){
var i = 0, _this = this;
var myFuncs = {
private: function(){
console.log(i++)
}
}
return {
call : function (methodName, args){
myFuncs[methodName](args);
}
}
})();
ASK.call('private');
答案 1 :(得分:0)
_this不应该引用ASK =(function(){})中的范围?
不。您没有将this
引用的任何对象称为“通过”匿名函数,因此_this
最终等于window
/ undefined
(取决于严格模式)
你可能对this
在JS中的工作方式感到困惑。对于许多好的解释,请点击谷歌。
请参阅 @kan 的代码片段,了解如何解决此问题,并注意闭包实际上为您解决了局部变量作用域问题,因此您并不需要关注{{ 1}}这里。
答案 2 :(得分:0)