Ссылка на вложенное свойство sibling в литерале объекта

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

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

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 ответ

Решение

"...in that question the needed property is a direct child of 'this', which in the above example isn't the case"

Actually, it probably is if you're calling .discount() от productN объект.

So you wouldn't use this.product1.price, because if you're calling discount от productN, затем this будет ссылка на productN,

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

this.price;
this.price_was;

...so it would look like:

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

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

      }
   }
};

Again, this assumes you're calling the function from the productN объект. If not, it would be helpful if you would show how discount называется

Другие вопросы по тегам