2016-05-31 7 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) 
    } 
} 

を試みたが、それは外にあるので、これさえバインドの例では「これは」ウィンドウを参照します。

は私がfunc1の内側

var _this = obj; 

を行うことができますが、私はこの醜いトリックを使用しないでください

私は基本的にfunc1の中でobjコンテキストを取得したい、またはobobコンテキストをsubobjに追加したいと思っています。 私は今何か考えることができません、あなたからの提案はありますか?

THANKS

+1

関数 'func1'の中で' obj'にアクセスできます。それはすでに閉鎖の中で捕らえられています。なぜあなたは文脈を混乱させる必要がありますか?単に 'function(){console.log(obj);}' –

+0

を使用してください。直接objアクセスについて言及しましたが、将来objをobj2に変更すると、それ自体が内部で使用されているかどうかをチェックしてください。 –

+1

* "...しかし、将来objをobj2に変更すると、それ自体がどこでも使用されているかどうかをチェックしてそこで変更する必要があります" *リバクタリングの名前変更をサポートしているIDEを使用するのはなぜですか? – DaoWen

答えて

2

まずは、あなたは既にobjがあなたの関数func1からアクセス可能であるので、コンテキストを混乱させる必要はありません。

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! –

関連する問題