可能重复:
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
未定义。
如何在同一个对象中访问我的值?
可能重复:
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
未定义。
如何在同一个对象中访问我的值?
您遇到的错误是由于未定义的事实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"
};
}()
};
您必须在不同的语句中执行此操作,因为该对象尚不存在。
var Wrap = {
Inner:{
site_base: "http://site.com/"
}
};
Wrap.Inner.marker_purple = Wrap.Inner.site_base + "images/icon/marker-puple.png"
它有效吗?
marker_purple : this.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"}
};
}());
如其他答案中所述,在实际创建对象之前,您无法访问对象属性。因此你的代码失败了。
但是,当使用 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 上找到,例如浏览器支持