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

有効ですか?

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

編集:私はそれをテストすることができ、うまく動作します。

于 2012-10-25T15:02:36.290 に答える
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 に答える
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

即時呼び出し関数式内でクロージャーを使用します。

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 に答える