2016-09-05 8 views
1

子要素の関数で、包含要素の変数にアクセスする必要があります。どうすればこれを達成できますか?この場合JavaScriptアクセスの親要素

object = { 
    a : { 
     c : function() { 
      //need to access b here 
     }, 
     d : 2 
    }, 
    b : 1 
}; 

私は機能cで変数bにアクセスする必要があります。私はbind()といくつかのバリエーションを試しましたが、何も効果がありませんでした。質問JavaScript access parent object attributeは私にとっては役に立たない。オブジェクトがより深くネストされているため、変数objectに到達できません。

+3

'object'または' b'への参照を渡すか、 'b'への参照を' a'オブジェクトに追加する必要があります。オブジェクト階層を「上に」移動するために利用できる組み込みの逆参照はありません。 – Pointy

+2

これを使用して参照し、リンクされた質問のようにこのコンテキストを指定して呼び出すと機能しませんでしたか? – Li357

+2

単に 'object.b'を参照していますか? – Bergi

答えて

1

aをゲッターにします。

object = { 
    get a() { 
     var self = this; 
     return { 
     c: function() { 
      return self.b; 
     }, 
     d: 2 
     } 
    }, 
    b : 1 
}; 

あるいは、cdを参照するthisを必要としない場合には、例えば、その後、

object = { 
    get a() { 
     return { 
     c:() => this.b, 
     d: 2 
     } 
    }, 
    b : 1 
}; 
+2

これは 'object.a!== object.a'という醜いプロパティを持っています – Bergi

1

objectが深くネストされていることそれが問題ではありません。ちょうどobject.bを使用してください。

var object; 
 
([{a:[{b:[{c:[{d:[{e:[{f: // deeply nested 
 
    object = { 
 
    a: { 
 
     c: function() { 
 
     console.log(object.b); 
 
     }, 
 
     d: 2 
 
    }, 
 
    b: 1 
 
    } 
 
}]}]}]}]}]}])[0].a[0].b[0].c[0].d[0].e[0].f.a.c();

0

私はオリオールの答えが好きです。 :-)

クロージャを使用する別の方法です。

([{a:[{b:[{c:[{d:[{e:[{f: // deeply nested 
 
    (function(){ 
 
    var object = { 
 
     a: { 
 
     c: function() { 
 
      console.log(object.b); 
 
     }, 
 
     d: 2 
 
     }, 
 
     b: 1 
 
    } 
 
    return object; 
 
    })() 
 
}]}]}]}]}]}])[0].a[0].b[0].c[0].d[0].e[0].f.a.c();

それともそれは理にかなっている場合は、別の関数にオブジェクトの作成を移動することができます(その関数に名前を付けることができます)。 DIコンテナを使用

function createHierarchy(){ 
 
    return ([{a:[{b:[{c:[{d:[{e:[{f:createObject()}]}]}]}]}]}]); 
 
} 
 

 
function createObject(){ 
 
    var object = { 
 
     a: { 
 
     c: function() { 
 
      console.log(object.b); 
 
     }, 
 
     d: 2 
 
     }, 
 
     b: 1 
 
    } 
 
    return object; 
 
} 
 

 
var hierarchy = createHierarchy(); 
 
hierarchy[0].a[0].b[0].c[0].d[0].e[0].f.a.c();

ここからわずか単一ステップです。 :-P

hierarchyの代わりにgraphが必要で、モデルが完全に間違っていることがあります。

関連する問題