почему разный результат? [дубликат]

113
29 апреля 2021, 09:20
На этот вопрос уже даны ответы здесь:
Потеря контекста вызова (5 ответов)
Закрыт 1 год назад.

"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();

Answer 1

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

READ ALSO
Универсальная AJAX-функция

Универсальная AJAX-функция

Нужна функция function getAjax(url,params), которая принимала бы аргументы: url(url get-запроса), массив данных params и возвращала бы массив или объект или строку...

97
Div:hover моргает за пределами границ

Div:hover моргает за пределами границ

Для div:hover я задаю width: 25%, но когда курсор стоит за пределами div'a начинается морганиеКак это иcправить?

86
Стрелка на чистом css

Стрелка на чистом css

Нужно сделать такую стрелку на cssвысота стрелки 10px

106