В одном из своих недавних сообщений в блоге я обсуждал мощь объектов в Javascript. Мощь объектов javascript стала возможной благодаря тому, что язык является прототипом по структуре. Технически эта прототипная структура объясняет, почему javascript не является объектно-ориентированным языком. Javascript по-прежнему очень мощный, и одно из моих последних открытий связано с методом .bind. Я не контактировал с этим методом во время работы во Flatiron в первую очередь потому, что они открыли бы банку червей, основанную на программировании и наследовании на основе прототипов, сразу после того, как наш мозг успокоился после рубинового шторма ООП, который нанес ущерб за несколько недель до этого. Вместо этого наша инструкция javascript была сосредоточена на передаче реквизитов и поддержании состояния. Обе темы огромны сами по себе и достаточно сильно отличаются от ООП, поэтому я думаю, что их было легче сохранить.

Итак, когда в игру вступает метод .bind? Метод .bind используется, когда разработчик хочет привязать объект к функции с помощью ключевого слова this. «Это» - очень важное понятие и мощное ключевое слово в javascript. Его сила заключается в способности изменять форму. Это на самом высоком уровне будет ссылаться на объект окна (ваш браузер).

Это также можно определить в функции. Итак, здесь, когда я создаю edgyBoy свой новый Square :), я могу ссылаться на атрибуты Square с помощью ключевого слова «this».

.bind, позволяющий программисту переопределить «this», добавляет объекту дополнительную функциональность без необходимости фактически добавлять метод к самому объекту. Теперь предположим, что мы пишем какое-то глупое приложение для чат-бота, в котором вы можете задавать вопросы. Когда у вас есть функция-конструктор, вы можете передавать ей разные объекты, а метод .bind позволит вам изменить ключевое слово «this» переданного объекта.

Функция-конструктор WhatsForDinner не принимает никаких аргументов, и когда console.log (this), мы возвращаем объект .window. Однако, если мы используем WhatsForDinner.bind (), мы можем передать объект, который также переопределит ключевое слово «this».

Как вы можете себе представить, эта настройка может сохранить код разработчиков СУХИМ и без повторов. Предоставление методов или атрибутов в вашей функции-конструкторе и передача объектных литералов предотвратит повторение кода. Вы также можете выполнить эту функцию с меньшим количеством кода, используя .call вместо .bind. Метод .call фактически вызывает функцию с данным значением this, в то время как метод .bind создает новую функцию, которая при вызове присваивает ключевое слово this переданному объекту. Итак, снова .call не требует создания новой функции, которая затем должна быть называться. На 2 шага меньше! Итак, давайте посмотрим на это в нашем примере "Что на ужин".

Этот подход немного на носу и может быть не столь эффективным, когда вам нужно создавать литерал объекта каждый раз, когда вы используете .call. Таким образом, более разумным решением будет использование двух методов конструктора!

Приведенный выше код может показаться немного запутанным, но это гораздо более эффективный способ создания Meals и использования метода .call () для возврата ответа для WhatsForDinner. Console.log (this) показывает объект еды, в котором мы используем метод .call (). Ответ объекта еды отображается как неопределенный, потому что и имя, и ингредиенты будут атрибутами еды и просто переданы.

Вот где я оставлю «это» :). И .bind, и .call являются очень мощными инструментами и действительно расширяют их гибкость, что, в свою очередь, открывает множество возможностей для программирования. Надеюсь, вы все сочли это полезным!