bind() 方法的简单实现
bind() 函数的用法
bind()
方法创建一个新的函数,在 bind()
被调用时,这个新函数的 this
被指定为 bind()
的第一个参数,而其余参数将作为新函数的参数,供调用时使用。
和 call()
方法不同的是,call()
方法只会临时改变一次 this
指向,并立即执行,而 bind()
方法是返回一个 this
改变后的函数,并且不会立即执行。
bind() 函数的实现
(function () {
Function.prototype.bind = function () {
let args = arguments;
return () => {
return this.apply(args[0], [...args].slice(1));
};
};
})();
解释
-
args
获取bind()
函数参数伪数组的引用,由于是伪数组,并不能直接调用slice()
方法,所以通过解构赋值转成真数组后调用slice()
方法,将bind()
方法第二个及之后的参数合并为数组并传给apply()
函数作为第二个参数 -
由于
this
要指向调用bind()
的函数,故只能采用箭头函数的形式,也可以写成如下形式:(function () { Function.prototype.bind = function () { let that = this, args = arguments; return function() { return that.apply(args[0], [...args].slice(1)); }; }; })();