Задать вопрос

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

Добрый день.

Изучаю 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);
});
  • Вопрос задан
  • 2907 просмотров
Подписаться 3 Оценить 1 комментарий
Решения вопроса 2
fart
@fart
Ответ написан
Комментировать
@Kuzzy
Вот тут всё разжевано по этой теме https://www.youtube.com/watch?v=-wY3IYmQzzc Когда вы вызываете функцию через new - она является конструктором и возвращает объект. this необходим для привязки контекста, так как функция является объектом. this.cost в данном случае задает метод cost объекта функции, в виде объекта это выглядело бы так: {cost: function(nights) {}} Вопщем сходите по ссылке, а лучше пересмотрите весь курс, там такие вещи довольно доступно описаны.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Lerg
@Lerg
Defold, Corona, Lua, GameDev
При создании объекта Tour, создаётся его метод cost. Значение типа функция помещается в поле cost объекта, this - псевдоним объекта.

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

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

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

Похожие вопросы