Ссылка на вложенное свойство sibling в литерале объекта - PullRequest
6 голосов
/ 14 сентября 2011

Я хочу сослаться на вложенное свойство в литерале объекта из другого свойства этого же литерала объекта.

Рассмотрим следующий надуманный пример:

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.

      }
   }
} 

Выше явно неверно, но как добраться до «цены» и «цены» было из «скидки»?

Я посмотрел на следующий вопрос, который близок, но в этом вопросе необходимое свойство является прямым потомком слова «this», что в приведенном выше примере не так. ссылочная переменная в литерале объекта?

Есть ли способ сделать это?

1 Ответ

3 голосов
/ 14 сентября 2011

"... в этом вопросе необходимое свойство является прямым потомком слова" this ", что в приведенном выше примере не соответствует действительности"

На самом деле, это вероятно, если вы звоните .discount() из productN объекта.

Так что вы не будете использовать this.product1.price, потому что если вы звоните discount из productNтогда this будет ссылкой на productN.

Просто сделайте это:

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 вызывается.

...