2

"use strict"

function CoffeeMachine(power) {

this.waterAmount = 0;

// физическая константа - удельная теплоёмкость воды для getBoilTime var WATER_HEAT_CAPACITY = 4200;

// расчёт времени для кипячения function getBoilTime() { return this.waterAmount * WATER_HEAT_CAPACITY * 80 / power; // ошибка! }

// что делать по окончании процесса function onReady() { alert( 'Кофе готов!' ); }

this.run = function() { setTimeout(onReady, getBoilTime()); };

}

var coffeeMachine = new CoffeeMachine(1000); coffeeMachine.waterAmount = 200;

coffeeMachine.run();

function CoffeeMachine(power) {
  this.waterAmount = 0;
  var WATER_HEAT_CAPACITY = 4200;

function getBoilTime() { return this.waterAmount * WATER_HEAT_CAPACITY * 80 / power; }

function onReady() { alert( 'Кофе готов!' ); }

this.run = function() { setTimeout(onReady, getBoilTime.call(this)); };

}

// создаю кофеварку, мощностью 100000W чтобы кипятила быстро var coffeeMachine = new CoffeeMachine(100000); coffeeMachine.waterAmount = 200;

coffeeMachine.run();

1 Answers1

1

Потому что вызов getBoilTime без указания контекста вызова вызывает эту функцию в глобальном контексте, у которого нет свойства waterAmount, что в "use strict" приводит к ошибке.

  • можно подробнее ? –  Jul 28 '19 at 06:27
  • в глобальном контексте, свойства waterAmount есть –  Jul 28 '19 at 06:30
  • я правильно понял что coffeeMachine.run(); вызывает getBoilTime() в глобальном контексте где this.waterAmount; this указывает на window где в строгом режиме будет unedfuned ? –  Jul 28 '19 at 14:02
  • тогда getBoilTime.call(this)); call будет указывать на объект coffeeMachine ? –  Jul 28 '19 at 14:03
  • @user345125 - да –  Jul 28 '19 at 14:26