В каком случае необходимо использовать функцию обертку?

Изучаю JS, но так и не могу понять в каких случаях необходимо использовать функцию обертку?

К примеру вот такой случай
function User(name) {
  this.name = name;
  this.say = function( ) { console.log(this.name)}
}

var john = new User ("John");

function testTimeout( ) {
  timer = window.setTimeout( john.say, 1000);
}


При выполнении ничего не присходит, но применяя функцию обертку получаю результат

timer = window.setTimeout( function( ){john.say( )}, 1000);
  • Вопрос задан
  • 2273 просмотра
Пригласить эксперта
Ответы на вопрос 1
я ни разу не эксперт в жс, зато я знаю волшебное слово debugger.
и вот что я думаю.

в первом случае window.setTimeout( john.say, 1000);
ты передаешь свойство объекта джон, то бишь функцию, как есть. и внутри нее this будет ни разу не джон, а внезапно window. потому как window вызывает свой метод setTimeout и ему передает некую функцию, которая сама по себе ничего ни про какого джона не слышала.

а во втором случае дело не в обертке, а в том что ты таки вызываешь эту функцию у джона - во втором случае скобки же стоят после say.

думаю, правильно будет вот так:
window.setTimeout(john.say.bind(john), 1000);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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