Использование трех функций вызывает, применяется и связывает - это точка знания, которую нельзя преодолеть, изучая язык JavaScript. Позвольте мне подвести итог использования трех из них и общих сценариев применения.
Во -первых, посмотрите на функцию вызова, которую можно понимать как «заимствование» и «запрос». Представьте себе следующий сценарий: вы блуждаете в одиночку и хотите позвонить домой, если у вас есть срочные вопросы, но, к сожалению, ваш телефон в задолженности, или он вне власти, или он попадает в яму. Короче говоря, ваш телефон просто не работает. Но вы должны сделать этот звонок, чтобы вы могли одолжить мобильный телефон друга, мобильный телефон соседа или общедоступный телефон. Таким образом, вы можете завершить звонок без доступного телефона. Что касается телефона, который вы используете, это не имеет значения. Во всяком случае, это тот же эффект, что и звонок с вашим собственным телефоном. Первоначальное намерение функции вызова также аналогично этому. Позвольте мне использовать код для моделирования сценария его приложения:
var Frog = {name: 'лягушка', say: function () {alert (this.name); }} var rabbit = {name: 'rabbit'} grog.say.call (рубин) // КроликХубит - это тупой объект, но если он хочет сказать свое имя, невозможно достичь его собственными способностями. К счастью, у него есть хороший друг по имени Frog, который может говорить. Итак, Рубин попросил лягушку реализовать это желание. Первый параметр Frog.say.call () должен быть заполнен лицом, которое издало запрос, и адвокат любит называть его клиентом. Вот лягушка с запросом на рубин, чтобы произнести имя для него, так что заполните рубин. Таким образом, когда вы говорите, имя рубабита будет искать вместо имени лягушки. Как бы это выглядело, если бы я заполнил лягушку здесь? Это все равно, что попросить себя что -то сделать и кормить себя солью. Вы можете попробовать:
var Frog = {name: 'лягушка', say: function () {alert (this.name); /Кормление себя сумкой солью должно быть твоим именем, и это ничего неожиданного. Давайте посмотрим на классическое использование звонка:
// преобразовать параметры в функцию реального массива функции grog () {var arr = [] .slice.call (аргументы); console.log (arguments.slice, arr.slice) // Неопределенная функция slice () {[Натуральный код]}} лягушка (1,2,3,4)После этого вызова мы можем использовать объект аргументов в качестве объекта массива. Есть много способов использовать звонок. Если вы откроете исходный код jQuery, вы можете легко найти много мест для его использования. Я не буду перечислять их здесь, но я вернусь на сцену перед нами. Слишком просто одолжить телефонный звонок. После телефонного звонка я обязательно захочу что -то вернуть. В конце концов, я блуждал так много лет и не был навернулся к пожилым людям и купил несколько местных специальностей, чтобы вернуться. Это определенно здорово. Тем не менее, давление жизни на улице настолько велико, что в дополнение к работе, есть также сверхурочные каждый день. Если вы уйдете, не только будет вычтена ваша зарплата, но и вам также придется потратить много расходов на поездки. Сумма этих денег, вероятно, достаточно для пожилых людей, чтобы потратить год дома. Не было экономически эффективно думать об этом, поэтому я снова подумал о функции вызова. Спрашивая его о помощи, кстати, это очень мудрый выбор, и он не заряжается, не ограничивает количество, не ограничивает вес и может принести столько, сколько вы. Я использую код, чтобы продемонстрировать его снова:
var Frog = {name: 'лягушка', отправить: function (деньги, еда, молоко, suagate) {alert (деньги+еда+молоко+suagate); /Если вы богаты и предназначены, вы даже можете отправить несколько iPhone6 Plus или что -то в этом роде. .^_^.
Говоря об этом, звонок почти закончился. Я не знаю, заставляет ли драма сцена выше понять, что это за звонок. Если это просто вызывает тоску по дому, то мне жаль.
Call также имеет сводного брата под названием Apply. Если вы понимаете использование вызова, то применить на самом деле одно и то же. Единственное отличие состоит в том, что когда применить не любит передавать вещи, кажется очень неприятным, чтобы положить одну вещь в сумку, и это не экологически чисто. Поэтому он предоставил большую коробку для вещей и просто положил все, что вы хотите передать в поле, которую он предоставил. Эта большая коробка - массив. Если применение приведено приведенным выше, это так:
var Frog = {name: 'лягушка', отправить: function (деньги, еда, молоко, suagate) {alert (деньги+еда+молоко+suagate); }} var rabbit = {name: 'rabbit'} // Обратите внимание на разницу в параметрах Frog.send.Apply (рубина, [«деньги», «еда», «молоко», «suagate»])Вышеуказанное - это прошлая и настоящая жизнь применения, звоните. Но неожиданно подать заявку и отец Call на целом в сфере недвижимости несколько лет назад, и был незаконнорожденный ребенок по имени Бинк. Хотя его два брата звонят и подают заявку на дебют через несколько лет, их способности не следует недооценивать. Однако его личность не признана в некоторых местах. Например, IE6. Далее я буду использовать код, чтобы продемонстрировать его навыки:
var name = 'rubbit'; var Frog = {name: 'лягушка', say: function () {settimeout (function (money, milk) {alert (this.name+money+milk)} .bind (this, 'money', 'milk'), 1000)}} grog.say ();В сравнении было обнаружено, что BIND может быть напрямую подключено к function () {}. Это эквивалентно сохранению вызова и применения, и непосредственно указать принципал и параметры, которые должны быть переданы после функции. С точки зрения стиля передачи сигмы, это больше похоже на вызов.
Что касается Bind, давайте посмотрим на другое классическое использование:
var obj = {name: 'Frog'} document.AddeventListener ('click', function () {alert (this.name); // Frog} .bind (obj), false);Подводя итог, применить, звонить, связывать, сходство между этими тремя братьями:
1. Первым параметром является объем правительства, то есть территория которой является работа.
2. Все параметры могут быть переданы
Различия:
Применить, звонок имеет лучшую совместимость, связывают некоторые более низкие версии браузеров, не поддерживают его.
Параметры, передаваемые применением, должны быть обернуты в массив, в то время как вызов и привязка перечислены один за другим.
Получили ли вы более глубокое понимание использования трех функций вызовов, применения и связывания? Я надеюсь, что эта статья может быть полезна для вас.