Не пойму почему код работает?

Добрый день.

Изучаю jQuery, было задание показать в консоли результат умножения nights * price.

Код работает, но я не пойму почему?

смущает это место this.cost = function(nights)

function Tour(price) {
  this.cost = function(nights) {
  	console.log(nights * price);
  }
}
$(document).ready(function() { 
  var tour = new Tour(100);
  tour.cost(4);
});
  • Вопрос задан
  • 2903 просмотра
Решения вопроса 2
@Kuzzy
Вот тут всё разжевано по этой теме https://www.youtube.com/watch?v=-wY3IYmQzzc Когда вы вызываете функцию через new - она является конструктором и возвращает объект. this необходим для привязки контекста, так как функция является объектом. this.cost в данном случае задает метод cost объекта функции, в виде объекта это выглядело бы так: {cost: function(nights) {}} Вопщем сходите по ссылке, а лучше пересмотрите весь курс, там такие вещи довольно доступно описаны.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Lerg
@Lerg
Defold, Corona, Lua, GameDev
При создании объекта Tour, создаётся его метод cost. Значение типа функция помещается в поле cost объекта, this - псевдоним объекта.

Так как cost использует переменную price, объявленную при создании объекта, она становится замыканием и у функции cost есть к ней доступ.

И на конец при вызове функции cost, она получает переменную nights и умножает её на уже сохранённую переменную price.
Ответ написан
zetamen
@zetamen
В поисках нового
Методы класса следует создавать через прототип, т.к. в вашем примере функция будет создаваться для каждого экземпляра, занимать лишнюю память.
Ответ написан
OnYourLips
@OnYourLips
Код должен работать. Функция в JS - обычный тип данных. Что вам не нравится?
Рекомендую прочитать литературу по основам JS, книгу с носорогом на обложке.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы