简述自己实现一个 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 关键字来调用,而上面的实现并不支持这一点。如果需要支持这一点,那么实现会稍微复杂一些。