Подтвердить что ты не робот

Какая разница между 'call/apply' и 'bind'

var obj = {
   x: 81,
   getX: function() { 
     console.log( this.x) 
   }
};
var getX = obj.getX.bind(obj);//use obj as 'this';
getX();//81
var getX = function(){
  obj.getX.apply(obj); 
}
getX();//also 81

Использование bind и call/apply выглядит очень похоже, я хочу знать, какая разница между ними. Две функции getX выше одинаковы?

4b9b3361

Ответ 1

bind возвращает функцию, которая будет действовать как исходная функция, но с this предопределена. Он обычно используется, когда вы хотите передать функцию обработчику события или другому обратному вызову async.

call и apply вызовет функцию, сразу же позволяющую указать как значение this, так и любые аргументы, которые получит функция.

Второй пример определяет анонимную функцию, которая вызывает apply. Это общая картина; bind обеспечивает стандартную реализацию того, что позволяет вам делать это с помощью простого вызова функции (таким образом, это быстрее и легче писать).

Ответ 2

.call() - вызывает ту же функцию с указанными аргументами

.apply() - вызывает ту же функцию с аргументами, указанными в массиве

.bind() - создает новую функцию с тем же самым телом функции с заданным значением this (первый аргумент) и возвращает эту функцию.

Во всех случаях первый аргумент используется как значение this внутри функции.

Ответ 3

Разница в том, как вы делаете вызов. Если вы использовали bind для возврата функции со значением bound this, вы просто вызываете функцию:

getx();

Если у вас нет связанной функции, и вы хотите установить this, вы делаете это с помощью call или apply:

someFunction.call(objectToUseAsThis, arg1, arg2);
// or
someFunction.apply(objectToUseAsThis, [arg1, arg2]);

Обратите внимание, что если у вас есть связанная функция (например, ваш getX), использование call на ней бессмысленно, потому что this, которое вы поставляете, будет просто переопределено границей this. (Использование apply может быть полезно, если у вас есть массив значений, которые вы хотите использовать в качестве аргументов.)