В JavaScript это указание динамически изменяется, и вполне вероятно, что это указание случайно разрушено в процессе написания программы. Поэтому нам нужна технология, которая может исправить это значение этого, поэтому у нас есть три метода: вызов, применение и привязка, чтобы изменить указание на это внутри корпуса функции, потому что функция имеет концепции «контекст определения», «контекст времени выполнения» и «контекст может быть изменен».
применить, позвонить
Примените: примените один метод определенного объекта и замените текущий объект другим объектом
Вызов: вызовите метод объекта, чтобы заменить текущий объект другим объектом
function person () {} person.prototype = {attr: {Age: 18, sex: 'Girl'}, say: function () {console.log ("мой возраст" + this.attr.age); console.log ("Я -" + this.attr.sex); }} var жениться = new Person (); Marry.say (); // мой возраст 18 // Я девушкаИзменить направление
function person () {} person.prototype = {attr: {Age: 18, sex: 'Girl'}, say: function () {console.log ("мой возраст" + this.attr.age); console.log ("Я -" + this.attr.sex); }} xiaoming = {attr: {Age: 20, sex: 'Boy'}}; var жениться = новый человек (); жениться.say (); ЖенитьсяЧто обычно
Оба могут использоваться для вызова метода вместо другого объекта, изменяя контекст объекта функции из начального контекста на новый объект, указанный ThisOBJ.
Разница
1. Применить: может быть только два параметра максимум - новый этот объект и массив аргаррея. Если вы передаете несколько параметров этому методу, запишите все параметры в этот массив. Конечно, даже если есть только один параметр, он должен быть записан в массив. Если Argarray не является допустимым массивом или не является объектом аргументов, будет сгенерирован TypeError. Если аргументы не будут предоставлены, глобальный объект будет использоваться в качестве этого, и не может быть принят какие -либо аргументы.
fun.call (thisarg [, arg1 [, arg2 [, ...]]]) Функция f (x, y) {console.log (x+y);} f.call (null, 1, 1) // return 22. Вызов: это прямой список параметров, который в основном используется, когда различные методы объекта JS вызываются друг к другу, так что текущий указатель остается последовательным или в особых случаях, этот указатель должен быть изменен. Если этот параметр не предоставлен, глобальный объект используется в качестве ThisOBJ.
fun.apply (thisarg, [argsarray]) функция f (x, y) {console.log (x+y);} f.call (null, [1,1]) // return 2Применить такой же, как функция вызова, за исключением того, что входящий список параметров отличается по форме. Этот контекст, который вы хотите указать. Это может быть любой объект Javascript (все в JavaScript является объектом). Вызов должен передать параметры по порядку, в то время как Apply PAMETS PAMES в массиве.
Если количество параметров функции не является фиксированным, используйте вызов, когда ваши параметры четко знают количество, и используйте применить, когда оно является неопределенным, а затем вставьте параметр в массив и передайте его. Когда количество параметров неопределенно, функция также может пройти все параметры через массив аргументов. Давайте посмотрим на использование некоторого использования
Код 1
var array1 = [12, "foo", {name: "joe"}, -2458]; var array2 = ["doe", 555, 100]; array.prototype.push.apply (array1, array2); console.log (array1); // [12, "foo", objКод два
var numbers = [5, 458, 120, -215]; math.max.apply (null, numbers); // 458
Код третий
log (12, "foo", {name: "joe"}, -2458); function log () {var args = array.prototype.slice.call (arguments); args.unshift ('(app)'); console.log.apply (консоль, args);}; // (app) 12 foo object {name: "joe"} -2458связывать
fun.bind (thisarg [, arg1 [, arg2 [, ...]]]])
В отличие от вышеперечисленного, BIND вернет новую функцию, которая изменяет это указание. Обратите внимание, что здесь подчеркивается новая функция, которая не является тем же адресом памяти, что и используется ранее, поэтому, когда вам нужно повторно использовать эту функцию, вы должны сохранить ее в переменной, чтобы облегчить следующий вызов. Две вышеупомянутые функции являются возвращенными результатами выполнения, то есть вызов выполняется.
Кроме того, еще одна вещь, которую следует отметить, это то, что первый параметр в функции Bind автоматически станет значением по умолчанию для возврата параметров в новой функции. Затем, когда называется официальный вызов, вам нужно только дать оставшиеся параметры, кроме первого параметра.
Функция f (x, y) {console.log (x+y);} f.call (null, [1,1]) var new_f = f.bind (null, 1,1) // Возврат new functionnew_f (1) // return 2Следует отметить, что параметр ThisARG во всех приведенных выше примерах заменяется NULL. Когда объект ThisARG не указан, это указание является глобальным объектом под нулевым и неопределенным, то есть среда выполнения кода JS
применить, звонить, сравнить
var obj = {bar: 'oops, это плохая идея}; var foo = {get: function () {return this.bar; }} var bind = foo.get.bind (obj), call = foo.get.call (obj), применить = foo.get.apply (obj); console.log (bind (), call, Apply); console.log (bind, call, Apply); console.log (typeof bind, typeof call, typeof apply); console.log (typeof bind (), typeof call, typeof apply);Я не вижу разницы. Разница в том, что когда вы хотите изменить контекст, он не выполняется немедленно, но обратный вызов выполняется, используйте метод bind (). Применить/вызов немедленно выполнит функцию
Применить, вызовать, привязка используются для изменения указания этого объекта функции; Первые параметры применения, вызовы, связывания - все объекты, на которые это должно указывать, то есть контекст, который должен быть указан; Применить, вызовать, привязать, все могут использовать последующие параметры для передачи параметров; BIND возвращает соответствующую функцию, которая удобна для вызова позже; Применить, звонок сразу вызывается
Приведенная выше статья глубоко понимает разницу между вызовами, применением и методами связывания в JavaScript - это все контент, которым я делюсь с вами. Я надеюсь, что это может дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.