2012-10-25 56 views
1

可能重複:
How can a Javascript object refer to values in itself?JavaScript對象字面範圍

我有一些JS如下:

var Wrap = { 

    Inner : { 

     site_base : "http://site.com/", 
     marker_purple : site_base + "images/icon/marker-puple.png" 
    } 
} 

site_base是不確定的。 Wrap.Inner.site_base未定義。

如何在同一對象內訪問我的值?

+3

你不能。您必須在單獨的聲明中執行此操作:'Wrap.Inner.marker_purple = Wrap.Inner.site_base + ...' – Pointy

+1

不可以; http://stackoverflow.com/questions/2787245/how-can-a-javascript-object-refer-to-values-in-it-本身 –

+1

對象文字不定義範圍,函數做變量。 – Bergi

回答

0

您必須在不同的語句中執行此操作,因爲該對象尚不存在。

var Wrap = { 
    Inner:{ 
     site_base: "http://site.com/" 
    } 
}; 
Wrap.Inner.marker_purple = Wrap.Inner.site_base + "images/icon/marker-puple.png" 
+0

我知道你的意思,但「不同的路線」並不適合我。儘管它可能應該考慮到JavaScript引擎的自動語句終止性質。 –

+0

好點,我更新了它。 – ferrants

0

正如在其他的答案已經指出,你不能訪問對象的屬性,實際上是創建對象之前。因此你的代碼失敗了。

當使用ECMAScript 5和Object.create()功能,但是,你可以模仿你想使用get()功能這樣的行爲:

var Wrap ={ 
    Inner: Object.create(Object.prototype, { 

    site_base: { writable:true, configurable:true, value: "http://site.com/" }, 

    marker_purple: { 
     get: function() { return this.site_base + "images/icon/marker-puple.png" } 
    } 
    }) 
}; 

更多信息,請MDN找到,例如在瀏覽器支持

2

替代另一份聲明:

var Wrap = { // variable names starting with capital letters make me uncomfortable 
    Inner: function() { 
    var base = "http://site.com/"; 
    return { 
     site_base: base, 
     marker_purple: base + "images/icon/marker-purple.png" 
    }; 
    }() 
}; 
3

你的錯誤是由於這樣的事實:site_base是不確定的,所以創建對象失敗。

試試這個:

var site_base = "http://site.com/"; 

var Wrap = { 
    Inner : { 
     site_base : site_base, 
     marker_purple : site_base + "images/icon/marker-puple.png" 
    } 
} 
+0

對此感到滿意 - 謝謝。只要我被允許,我會盡快接受。 – Alex

0

是否有效?

marker_purple : this.site_base + "images/icon/marker-puple.png" 

編輯:我可以測試它,它工作正常順便說一句。

+0

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 –

+0

不,它是無效的。當您可以輕鬆測試它們時,請勿將野外猜測作爲答案發布。 – interjay