简述自己实现一个 bind ?
参考答案:
bind()
是 JavaScript 中的一个函数方法,它创建一个新的函数,当调用这个新函数时,bind()
的第一个参数将作为它运行时的 this,之后的一序列参数将会在传递的实参前传入作为它的参数。
要实现一个简单的 bind()
,我们需要考虑以下点:
- 新的函数在调用时,需要让原始函数的
this
指向bind()
的第一个参数。 bind()
的第二个及以后的参数,需要在调用新函数时,作为原始函数的参数。- 如果
bind()
没有任何参数,或者第一个参数不是函数,那么需要返回原函数。
下面是一个简单的 bind()
的实现:
Function.prototype.myBind = function(context) {
var self = this; // 保存原函数
// 获取bind()的第二个及以后的参数
var args = Array.prototype.slice.call(arguments, 1);
// 返回一个新函数
return function() {
// 获取bind返回的函数传入的参数
var bindArgs = Array.prototype.slice.call(arguments);
// 执行原函数,并返回结果
return self.apply(context, args.concat(bindArgs));
}
}
这个 myBind
方法会返回一个新的函数,当这个新函数被调用时,会调用原始函数 self
,self
的 this
被设置为 context
,self
的参数是 bind()
的第二个及以后的参数和 myBind
返回的函数传入的参数的组合。
这样,我们就实现了一个简单的 bind()
方法。
需要注意的是,这个实现并不完全等同于原生的 bind()
方法,原生的 bind()
方法返回的函数可以用作构造函数,即可以通过 new
关键字来调用,而上面的实现并不支持这一点。如果需要支持这一点,那么实现会稍微复杂一些。