可能重复:
How can a Javascript object refer to values in itself?
我有一些JS如下:
var Wrap = {
Inner : {
site_base : "http://site.com/",
marker_purple : site_base + "images/icon/marker-puple.png"
}
}
site_base
未定义。
Wrap.Inner.site_base
未定义。
如何在同一个对象中访问我的值?
答案 0 :(得分: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"
}
}
答案 1 :(得分: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"
};
}()
};
答案 2 :(得分:0)
您必须在不同的语句中执行此操作,因为该对象尚不存在。
var Wrap = {
Inner:{
site_base: "http://site.com/"
}
};
Wrap.Inner.marker_purple = Wrap.Inner.site_base + "images/icon/marker-puple.png"
答案 3 :(得分:0)
在Immediately Invoked Function Expression中使用闭包:
var Wrap = (function(){
var site_base = "http://site.com/"
return {
Inner: {marker_purple : site_base + "images/icon/marker-puple.png"}
};
}());
答案 4 :(得分: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上找到更多信息,例如:关于浏览器支持
答案 5 :(得分:0)
有效吗?
marker_purple : this.site_base + "images/icon/marker-puple.png"
编辑:我可以测试它,它的工作正常。