2016-05-31 33 views
0

有沒有人知道一個更優雅的方式來訪問函數內父對象的父對象?在函數裏面獲取祖父上下文的內容

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

回答

2

首先。由於您的函數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! –

相關問題