10

同じオブジェクト リテラル内の別のプロパティ内から、オブジェクト リテラル内の入れ子になったプロパティを参照したいと考えています。

次の不自然な例を考えてみましょう:

var obj = {
   product1: {
      price: 80,
      price_was: 100,
      discount: function(){

        return 100 - (100 * (price/price_was));

        //I don't want to use:  
        //100 - (100 * (this.product1.price/this.product1.price_was))
        //because the name of the parent ('product1' in this case) isn't known 
        //a-priori.

      }
   }
} 

上記は明らかに間違っていますが、「discount」内から「price」と「price_was」を取得するにはどうすればよいですか?

次の質問を見ましたが、これは近いですが、その質問では、必要なプロパティは「this」の直接の子であり、上記の例ではそうではありません。 オブジェクトリテラルで変数を参照しますか?

これを行う方法はありますか?

4

1 に答える 1

4

「...その質問では、必要なプロパティは「this」の直接の子ですが、上記の例ではそうではありません」

実際、オブジェクト.discount()から呼び出している場合はおそらくそうです。productN

からthis.product1.price呼び出している場合、 はへの参照になるため、は使用しません。discountproductNthisproductN

これを行うだけです:

this.price;
this.price_was;

...次のようになります。

var obj = {
   product1: {
      price: 80,
      price_was: 100,
      discount: function(){

        return 100 - (100 * (this.price/this.price_was));

      }
   }
};

繰り返しますが、これはオブジェクトから関数を呼び出していることを前提としていproductNます。そうでない場合は、どのよう discountに呼び出されているかを示していただけると助かります。

于 2011-09-13T21:24:28.107 に答える