TYPKRFT
TYPKRFT

Reputation: 326

Why doesn't this objects variable expression work?

Can someone please explain why hotel.availableRooms is NaN? I am trying to learn objects in JavaScript. Thanks!

var hotel = {
  name: 'The Shining',
  totalRooms: 238,
  bookedRooms: 0,
  availableRooms: this.totalRooms - this.bookedRooms,
  roomTypes: ['single', 'double', 'haunted'],
  bookRoom: function() {
    this.availableRooms -= 1;
    this.bookedRooms += 1;
  }
};


hotel.bookRoom();

console.log(hotel.totalRooms);
console.log(hotel.bookedRooms);
console.log(hotel.availableRooms);

Upvotes: 0

Views: 37

Answers (1)

Yury Tarabanko
Yury Tarabanko

Reputation: 45121

When the expression availableRooms: this.totalRooms - this.bookedRooms, is evaluated this is not hotel but whatever context you are running your code.

var hotel = {
  name: 'The Shining',
  totalRooms: 238,
  bookedRooms: 0,
  roomTypes: ['single', 'double', 'haunted'],
  bookRoom: function() {
    this.availableRooms -= 1;
    this.bookedRooms += 1;
  }
}

hotel.availableRooms = hotel.totalRooms - hotel.bookedRooms

Or

  Object.defineProperty(hotel, 'availableRooms', {
      get: function() {
         return this.totalRooms - this.bookedRooms
      }
  })

Upvotes: 1

Related Questions