1

可能重复:
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未定义。

如何在同一个对象中访问我的值?

4

6 回答 6

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"
    }
}
于 2012-10-25T14:51:37.460 回答
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"
    };
  }()
};
于 2012-10-25T14:51:25.387 回答
0

您必须在不同的语句中执行此操作,因为该对象尚不存在。

var Wrap = {
    Inner:{
        site_base: "http://site.com/"
    }
};
Wrap.Inner.marker_purple = Wrap.Inner.site_base + "images/icon/marker-puple.png"
于 2012-10-25T14:49:53.233 回答
0

它有效吗?

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

编辑:我可以对其进行测试,并且效果很好。

于 2012-10-25T15:02:36.290 回答
0

在立即调用函数表达式中使用闭包:

var Wrap = (function(){
  var site_base = "http://site.com/"
  return {
      Inner: {marker_purple : site_base + "images/icon/marker-puple.png"}
  };
}());
于 2012-10-25T14:50:46.067 回答
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 上找到,例如浏览器支持

于 2012-10-25T14:51:14.070 回答