次のようなJSがあります。
var Wrap = {
Inner : {
site_base : "http://site.com/",
marker_purple : site_base + "images/icon/marker-puple.png"
}
}
site_base
未定義です。
Wrap.Inner.site_base
未定義です。
同じオブジェクト内で自分の値にアクセスするにはどうすればよいですか?
次のようなJSがあります。
var Wrap = {
Inner : {
site_base : "http://site.com/",
marker_purple : site_base + "images/icon/marker-puple.png"
}
}
site_base
未定義です。
Wrap.Inner.site_base
未定義です。
同じオブジェクト内で自分の値にアクセスするにはどうすればよいですか?
あなたが持っているエラーsite_base
は未定義であるため、オブジェクトの作成は失敗します。
これを試して:
var site_base = "http://site.com/";
var Wrap = {
Inner : {
site_base : site_base,
marker_purple : site_base + "images/icon/marker-puple.png"
}
}
別のステートメントの代替:
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"
};
}()
};
有効ですか?
marker_purple : this.site_base + "images/icon/marker-puple.png"
編集:私はそれをテストすることができ、うまく動作します。
他の回答で既に述べたように、オブジェクトが実際に作成される前に、オブジェクトのプロパティにアクセスすることはできません。したがって、コードは失敗します。
ただし、 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 を参照してください。
オブジェクトがまだ存在しないため、別のステートメントでそれを行う必要があります。
var Wrap = {
Inner:{
site_base: "http://site.com/"
}
};
Wrap.Inner.marker_purple = Wrap.Inner.site_base + "images/icon/marker-puple.png"
即時呼び出し関数式内でクロージャーを使用します。
var Wrap = (function(){
var site_base = "http://site.com/"
return {
Inner: {marker_purple : site_base + "images/icon/marker-puple.png"}
};
}());