2013-06-18 160 views
0

我使用的對象結構用於我的JS文件,並希望能夠分配的屬性之一(這是一個數組)到其它性質中的一種:從另一個屬性到達的對象屬性

AvGen = { 

    theBody: { 
     bodies: [ 
      fooObj, 
      foo2Obj, // <--- assign this property... 
      foo3Obj 
     ], 
     bodyColor: '#DB6EDB', 
     currBodyNr: 1, 
     currBodyObj: AvGen.theBody.bodies[1] // <--- ...to this property 

// ... rest of the code 

然而,試圖做到這一點時,我得到了以下錯誤消息:

Uncaught ReferenceError: AvGen is not defined 

如果我刪除「AvGen」它說,「汽車美容」沒有替代定義。我怎樣才能做到這一點?

+0

x = foo2Obj,則currBodyObj:x,... – dandavis

回答

0

你必須先初始化對象AvGen因此,它需要的bodies設定值,然後,通過函數指定要this.currBodyObj之一。

0

Avgen尚未在該行上實例化。相反,這樣做:

AvGen = {}; 
AvGen.theBody = {}; 
AvGen.theBody.bodies = [fooObj, foo2Obj, foo3Obj]; 
AvGen.theBody.bodyColor = '#DB6EDB'; 
AvGen.theBody.currBodyNr = 1; 
AvGen.theBody.currBodyObj = AvGen.theBody.bodies[1]; 
// etc.. 
1

在新的瀏覽器,你可以使用一個getter:

AvGen = { 

    theBody: { 
     bodies: [ 
      1, 
      2, 
      3 
     ], 
     bodyColor: '#DB6EDB', 
     currBodyNr: 1, 
     get currBodyObj() { 
      return AvGen.theBody.bodies[AvGen.theBody.currBodyNr]; 
     } 
    } 
} 

console.log(AvGen.theBody.currBodyObj); //2 

FIDDLE

但是,你也可以只使用,而不是一個性質的方法:

currBodyNr: 1, 
currBodyObj: function() { 
    return AvGen.theBody.bodies[AvGen.theBody.currBodyNr]; 
} 

//... 

console.log(AvGen.theBody.currBodyObj()); //2 
相關問題