在函数里面获取祖父上下文的内容

问题描述:

有没有人知道一个更优雅的方式来访问函数内父对象的父对象?在函数里面获取祖父上下文的内容

var obj = { 
    subobj : { 
     func1 : function() { 
      // here 'this' will refer to window 
      // i want to access obj instead 
     } 
    } 
}; 

var obj = { 
    func1 : function() { 
     // i know 'this' here will refer to bj 
    } 
} 

我也尝试

var obj = { 
    subobj : { 
     func1 : function() { 
      // even 'this' will refer to window 
     }.bind(this) 
    } 
} 

但即使在这种结合例如“这个”将是指窗口,因为它是外部。

我可以做

var _this = obj; 

内FUNC1但我请勿想用这个丑陋的伎俩。

我基本上想在func1里面获得obj上下文,或者在obobj上添加obj上下文。 我现在想不出任何东西,你们有什么建议吗?

感谢

+1

您可以在函数func1中访问'obj'。它已经被关闭。为什么你需要混淆上下文?简单地使用'function(){console.log(obj);}' –

+0

是的,我已经提到过直接obj访问,但是如果我将obj改为obj2,我将不得不检查它在自身内部的使用并在那里改变。 –

+1

*“...但是如果我将obj改为obj2将来,我将不得不检查它在自身内部使用和改变的地方。”*这就是为什么你使用重构支持变量重命名的IDE! – DaoWen

首先。由于您的函数func1内已有obj,因此您并不需要混淆上下文。

var obj = { 
    subobj : { 
     func1 : function() { 
      //use `obj` here 
      console.log(obj); 
     } 
    } 
}; 

或者如果你出于某种原因想要访问obj这个。请执行以下操作:

var obj = { 
    subobj : { 
     func1 : function() { 
      //this is now obj here. Go suffer maintainer! 
     }.bind(obj); 
    } 
}; 
+0

我试图构建松散耦合的模块。并且访问模块(在这种情况下是'obj')是我所需要的,从那里我可以去任何地方访问模块内的任何东西。无论如何thnx! –