Использование .bind() и оператор instanceof [дубликат]

118
17 ноября 2020, 22:00
На этот вопрос уже даны ответы здесь:
Потеря контекста вызова (5 ответов)
Закрыт 1 год назад.

Изучаю книгу из серии You dont know JS: cover this & objects, Келли Симпсона! Возник вопрос по оператору instanceof! Не понятна следующая фраза из книги:

Если вы используете встроенную утилиту .bind(...) для создания жестко привязанной функции, то у созданной функции не будет свойства .prototype. При использовании instanceof с такой функцией прозрачно подставляется .prototype целевой функции, из которой была создана жестко привязанная функция.

Использование функции с жесткой привязкой для "вызова конструктора" крайне маловероятно, но если вы сделаете это, то она будет вести себя так, как если бы вы вызвали целевую функцию. Это значит, что вызов instanceof с жестко привязанной функцией также ведет себя и в соответствии с оригинальной функцией

Вот собственно то, что я решил проверить:

function foo(age){ 
  this.age=age; 
  return this.name; 
}; 
 
var a={name: "kristine"}; 
 
var b = foo.bind(a); 
 
document.write(b()+"<br>"); //kristine 
 
var c=new b(23); 
 
document.write(c.age+"<br>"); //23 
 
document.write(c instanceof foo); //true
Суть вопроса такова, что здесь не обычного? Ну создал я "конструктор" foo(), связал его "жёстко" с объектом a создал новый объект на основе конструктора, проверил этот новый объект, есть ли в цепочке его прототипов foo() вернулось true. В чём тогда суть того, о чем пишет автор книги? Просто данный автор славится тем, что разрушает "мифы" о Javascript, и вполне возможно, что я просто его недопонимаю местами, быть может он в очередной раз решил показать то место, где разработчики думают так, но на самом деле происходит другое! Просьба объяснить на доступном языке, можно даже с несложными примерами, тем кому не сложно! Спасибо!

Answer 1

Возможно, автор имеет в виду, что .bind() возвращает ту же функцию, но с фиксированный this. Судя по языку изложения, вы используете машинный перевод. Попробуйте перечитать оригинал, может, будет лучше понятно.

READ ALSO
React Router запомнить предыдущий url

React Router запомнить предыдущий url

Всем привет у меня есть такая вот проверка на авторизованность, если пользователь открывает страницу и он не авторизован то его редиректит...

120
Создание визарда с предпросмотром

Создание визарда с предпросмотром

Мне нужен пошаговый визард для редактирования моделиОстановился на jQuery Steps

142
Проверить есть ли свойство объекта в массиве

Проверить есть ли свойство объекта в массиве

Есть массив с объектамиНужно проверить есть ли данное свойство объекта в массиве с объектами

117
Сверить два массива с объектами

Сверить два массива с объектами

Есть два массива с объектамиНужно сверить если элементы первого массива есть во втором

106