是否可以以全局函数的方式调用非全局函数?(即不使用限定词)例如
var lib = {
notGlobalFn: function(){ /*...*/ }
};
var foobar = function(){
notGlobalFn();
};
foobar();
我本人(下面列出)可以想到三个解决方案,但我希望会有另一个不使用全局函数或其他方法的解决方案。上下文或子功能。还有其他方法吗?(或者我对学徒有太多限制吗?)
我的重点是简洁,并且能够在lib上下文之外定义foobar函数(即,因此我可以定义一个库,并让人们以本地上下文方式使用它)。
测试: http : //jsbin.com/denawa/5/edit?javascript,console
解决方案1: -使用子功能
由于foobar已集成到lib中而被拒绝。
var lib = function(){
var notGlobalFn = function(){ /*...*/ }
return {
foobar: function(){
notGlobalFn();
}
}
};
lib().foobar()
解决方案2: -设置/取消设置全局功能
被拒绝,因为使用了全局函数。
notGlobalFn = lib.notGlobalFn
foobar();
notGlobalFn = undefined
解决方案#3: -使用上下文
由于他们使用限定词而被拒绝。
var foobar = function(){
this.notGlobalFn();
};
foobar.call(lib);
OR
var foobar = function(){
lib.notGlobalFn();
};
foobar();
总而言之,如果我必须选择上述方法之一,我将选择解决方案2。
**编辑**
另一个解决方案: -使用局部变量(解决方案#3的扩展名)。
var foobar = function(){
var notGlobalFn = lib.notGlobalFn
notGlobalFn();
};
另一个解决方案: -将notGlobalFn添加到“ this”(我认为这不起作用)。
function init(scope){
scope.notGlobalFn = lib.notGlobalFn
}
var foobar = function(){
init(this)
notGlobalFn()
};
这就是我最终要解决的问题。不知道为什么这会被拒绝/关闭,没有人要求澄清!
function init(scope){
scope.notGlobalFn = lib.notGlobalFn
}
var foobar = function(){
init(this)
notGlobalFn()
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句