Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reference nested 'sibling'-property in object literal

I want to reference a nested property in an object literal from within another property in that same object literal.

Consider the following contrived example:

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.

      }
   }
} 

The above is obviously incorrect, but how to get to 'price' and 'price_was' from within 'discount'?

I've looked at the following question, which is close, but in that question the needed property is a direct child of 'this', which in the above example isn't the case. reference variable in object literal?

Any way to do this?

like image 870
Geert-Jan Avatar asked Sep 13 '11 21:09

Geert-Jan


1 Answers

"...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() from the productN object.

So you wouldn't use this.product1.price, because if you're calling discount from productN, then this will be a reference to productN.

Just do this:

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 object. If not, it would be helpful if you would show how discount is being called.

like image 61
user113716 Avatar answered Oct 24 '22 05:10

user113716