2012-08-29 7 views
5

私はこの1つのようなJavaScriptでネストされたオブジェクトがあります:私はサブで定義された関数からnameRootにアクセスしたいJavascriptのネストされたオブジェクトへのアクセスルートレベル

{ 
nameRoot: "my object", 
sub: { 
    nameSub: "my sub object" 
} 
} 

を。

var self = this; 

と使用済みの自己が、どのように私はオブジェクトリテラルでこれを行うことができます:私はのようなものを定義していた機能を使用して

+0

私はあなたができるとは思わない。私は私の頭の上のポストを知らないが、私は最近StackOverflowでこれを読んで覚えている。オブジェクトリテラルではなく、そのオブジェクトを関数として定義できますか? – Brad

+2

できません。しかし、オブジェクトは参照なしではないので、あなたが入っているオブジェクトへの参照を持つ必要があります。 – David

+1

これは、ノードやそのようなものが 'parentNode'への明示的な参照を持つ必要がある理由です。 – voithos

答えて

1

次のコードでは、親要素にリンクし、親がfor-inループで表示されないようにすることができます。

var parent = { a: 1 }; 
var child = { b: 2 }; 

Object.defineProperty(
    child, 'parent', 
    { value: parent, 
     enumerable: false } 
); 

parent.child = child; 

child.performAction = function() { 
    console.log(this.parent.a) // 1 
} 
0

これを行う最善の方法は関数スコープである。

var func = new myFunc(); 
func.sub = new myFunc(); 
func.sub.nameRoot = "my sub object"; 

は明らかにそれを行うには、よりスマートな方法(例えば、関数のparamsを通じて名を渡す)があるが、これは一般的なパターンです:

function myFunc(){ 
    this.nameRoot = "my object"; 
} 

、あなたのような何かを行うことができます。

+0

質問:_しかし、 "リテラルオブジェクト"でこれを行うことはできますか?_ –

+0

それは私が提案した方法で行うと言いました。 – Paul

関連する問題