JavaScript对象文字范围

时间:2012-10-25 14:48:14

标签: javascript object scope literals

  

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

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

6 个答案:

答案 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"  

编辑:我可以测试它,它的工作正常。