Новая привязка в javascript?

В приведенном ниже фрагменте привязки:

function foo(something) {
    this.a = something;
}

var obj1 = {};

var bar = foo.bind( obj1 );
bar( 2 );
console.info( obj1.a ); // 2

var baz = new bar( 5 );
console.info( obj1.a ); // 2
console.info( baz.a ); // 5

На этом этапе var bar = foo.bind( obj1 ); мы связываем пустой obj1 с функцией foo.

После выполнения bar(2) значение obj1 2.

Хотите знать, что вызвало срабатывание bar(2)?

Мое предположение:

Поскольку bar назначен foo и связан с obj1, вызов bar(2) мог назначить this.a = 2 и сохранить это значение в obj1 (то есть obj1 = {a: 2}).

Верно ли мое предположение?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
614
4

Ответы 4

Ваше предположение верно.

 var bar = foo.bind( obj1 );

делает bar ссылку на объект foo. Таким образом, теперь вы можете получить доступ к функции через панель.

 bar( 12 );

выводит 12, если вы вызываете console.info(), и так далее.

Здесь bind(obj1) работает так, как будто вы заменяете scope по умолчанию для foofunction на obj1, поэтому ключевое слово this заменяется пустым объектом (obj1) внутри foo.

function foo(something) {
    //this = {}  (obj1);
    //this.a == obj.a
    this.a = something;
}

var obj1 = {};

var bar = foo.bind(obj1);

Вызов bind() для функции возвращает новую связанную функцию. Когда вы вызываете эту связанную функцию, она выполняет исходную функцию с контекстом, который вы передали в качестве первого аргумента. Следовательно, this внутри foo указывает на obj1, когда вы вызываете его через связанную функцию.

Чтобы понять это, вам нужно сначала взять то, что делает .bind?

bind - это функция, которая возвращает другую функцию, которая называется связанной.

function x (){
  console.info(this.item)
}

рассмотрите приведенный выше код, не имеет никакого представления о том, что такое item.

var obj = { item  : 10};

рассмотрите этот объект, этот объект знает о свойстве элемента.

Когда вы вызываете .bind для объекта x (функции), он возвращает ту же копию функции (называемую граница), но с контекстом obj {item: 10}.

var bound = x.bind(obj);

В этом конкретном заявлении говорится, что задайте эту конкретную функцию в контексте obj.

Теперь, если мы вызовем bound(), он напечатает 10

Другие вопросы по теме