以全局函数方式调用局部函数?

尼克·格莱利(Nick Grealy)

是否可以以全局函数的方式调用非全局函数?(即不使用限定词)例如

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()
};
尼克·格莱利(Nick Grealy)

这就是我最终要解决的问题。不知道为什么这会被拒绝/关闭,没有人要求澄清!

function init(scope){
  scope.notGlobalFn = lib.notGlobalFn
}
var foobar = function(){
  init(this)
  notGlobalFn()
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章