what's the difference between 'call/apply' and &

what's the difference between 'call/apply' and 'bind'

本文关键字:apply and call the what difference between      更新时间:2023-09-26
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函数是相同的吗?

bind返回一个函数,它将像原始函数一样工作,但预定义了this。当你想要将一个函数传递给事件处理程序或其他异步回调时,通常使用它。

callapply将立即调用一个函数,让您指定this的值和该函数将接收的任何参数。

第二个示例定义了一个调用apply的匿名函数。这是一个常见的模式;bind提供了一个标准的实现,它允许你用一个简单的函数调用来完成它(因此更快更容易编写)。

.call() -使用指定的参数调用相同的函数

.apply() -使用数组

中指定的参数调用相同的函数

.bind() -创建一个具有相同函数体的新函数,预设值为this(第一个参数),并返回该函数。

在所有情况下,第一个参数都被用作函数内部this的值。

区别在于如何进行调用。如果您使用bind来返回具有绑定this值的函数,则只需调用该函数:

getx();

如果你没有绑定函数,你想设置this,你可以设置callapply:

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

请注意,如果您有一个绑定函数(如getX),则在其上使用call是没有意义的,因为您提供的this将被绑定的this覆盖。(使用apply可能仍然是有用的,如果你有一个数组的值,你想作为参数。)