Метод вызова функции
Прежде чем говорить о применении трех братьев, позвоните и свяжите в JavaScript, я хотел бы поговорить о том, какие методы вызова функций:
• как функция
• как метод
• как конструктор
• косвенно вызовать их методы Call () и Apply ()
Мы все знаем предыдущие три метода вызова и не находимся в рамках этой статьи, поэтому мы не будем говорить о них.
Поговорим о методе четвертого звонка
Косвенные вызовы через Call () и Apply ()
Фактически, мы можем рассматривать эти две функции как методы определенного объекта и косвенно вызвать функцию, вызывая метод:
функция f () {} f.call (o); f.apply (o);Первый параметр call () и Apply () - родительский объект для вызова функции. Это вызывающий контекст, и ссылка на него получается через это в теле функции.
Так они одинаковы, или есть какие -либо различия, а также метод привязки? Не волнуйтесь, давайте подробно проанализируем различия и связи между тремя ниже.
вызов()
Метод Call () определяет конкретный этот указатель (идиот, не беспокойте меня о его правильности) и параметры для метода, который его вызывает. Например, есть такая функция:
var fn = function (arg1, arg2) {console.log (this, arg1, arg2); }Я назову это:
fn.call (null, 'skylor', 'min'); //1fn.call(Undefined, 'skylor', 'min'); // 2var fx = function () {} fn.call (fx, 'skylor', 'min'); // 3Каковы возвратные значения этих трех методов вызова? Нет чепухи, пожалуйста, посмотрите:
1. Нулевая "Skylor" "min" 2. Неопределенный "Skylor" "min" 3. fx "skylor" "min"
Это действительно так? Вы умны, зайдите в консоли браузера и попробуйте. Я пойду, ты мошенник, это не так:
Chrome1. Окно "Skylor" "min" 2. window "skylor" "min" 3. fx "skylor" "min"
Хорошо, ты умный. Но это уже очень хорошо иллюстрирует метод вызова. (Окно очень продвинуто, Microsoft хихикает ...)
Мы заметили, что метод вызова, первый параметр состоит в том, чтобы указать этот указатель, и каждый параметр после этого определяет необходимые параметры. Обратите внимание, что я использую «каждый», что означает, что вам нужно несколько параметров и вы хотите вызвать функцию, и записать в нее каждый параметр один за другим.
применять()
Apply () - брат Call (). Другие места выглядят одинаково, все они мужчины, но они разные в одном месте. Давайте сначала посмотрим на пример:
fn.apply (null, ['skylor', 'min']); //1fn.apply(fx, ['skylor', 'min']); // 2
Брат, ты написал это неправильно? Есть больше кронштейнов. Нет, нет, нет, это то, что отличает его от вызова. Его второй параметр - требуемый массив параметров.
связывать()
Bind (), не три брата, я понимаю это, Блабла ... нет, нет, это присяжный брат, который стал присяжными братьями с применением и звонкой, а не настоящим братом.
Конечно, метод привязки также позволяет указать этот указатель, но вместо вызова функции он возвращает функцию (или копию), которая его вызывает, и определяет конкретный этот указатель и параметр для этой функции. Конвенция, примеры иллюстрируют все:
var fnbound = fn.bind (null, 'skylor', 'min');
В настоящее время FnBound является функцией, другой функцией с этой указом на NULL, а параметры - ['skylor', 'min']. Называется:
fnbound ();
результат:
null, 'skylor', 'min'
Не беспокойся о окне со мной. Полем Полем Полем Полем
Разница между Bind и двумя другими братьями заключается в том, что она не вызывает функции, а возвращает новую функцию. Точно так же он также указывает этот указатель и параметр. Метод определения параметров такой же, как и вызов, и он приходит один за другим.
Давайте получим последний пример:
var shoppingCart = (function () {var _calculateprice = function () {return this.price * this.amount;}; return {countulateprice: _calculateprice}}}) (); var Goals = {name: 'hammer', цена: 199, сумма: 2}; shophip.calculateprice.call (Goald);Это заканчивается. !
Выше приведено все содержание Apply, Call и Bind в JavaScript, введенном вам редактором. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!