call、apply、bind的区别,手写bind函数

158 阅读1分钟

1.共同点都是函数执行绑定方法

2.call() 方法

  • 使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数。

注意:该方法的语法和作用与 apply() 方法类似,只有一个区别,就是 call() 方法接受的是一个参数列表,而 apply() 方法接受的是一个包含多个参数的数组。

  • function.call(thisArg, arg1, arg2, ...)
  • 返回值 使用调用者提供的 this 值和参数调用该函数的返回值。若该方法没有返回值,则返回 undefined。

3.apply() 方法

  • 调用一个具有给定this值的函数,以及作为一个数组(或类似数组对象)提供的参数。
  • func.apply(thisArg, [argsArray])
  • 返回值 调用有指定this值和参数的函数的结果。

4.bind() 方法

  • 创建一个新的函数,在 bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用。
  • function.bind(thisArg[, arg1[, arg2[, ...]]])
  • 返回值:返回一个原函数的拷贝,并拥有指定的 this 值和初始参数。

bind:不立即执行该函数;apply和call是立即执行函数

5.使用举例

var obj=fn.call({},3,5);
var obj=fn.apply({},[3,5]);
var obj=fn.bind({})(3,5);

6.手写bind

Funtion.protoType.bind1 = function(){
	var self = this;
    return function(){
    	return self.apply(obj,Array.from(arguments))
    }