如何用apply实现一个bind?
面试题:
如何用apply实现一个bind?
bind说明
bind方法与call/apply最大的区别就是bind返回一个绑定上下文的函数,而call/apply是直接执行了函数,特性如下:
- 可以指定this
- 返回一个绑定了this的函数
- 可以传参
- 柯里化
代码
Function.prototype._bind = function(target) {
// 保留调用_bind方法的对象
let _this = this;
// 接收保存传入_bind方法中的参数,等价于arguments.slice(1),除了第一个参数其余全视作传入参数
let args = [].slice.call(arguments, 1)
return function() {
return _this.apply(target, args)
}
}
let obj = {
name: '测试员小陈'
}
// 测试函数
function test(args) {
console.log('this:', this);
console.log('我的名字:', this.name);
console.log('我接收的参数:', args);
}
console.log(test._bind(obj, "I am args")); // output: [Function]
test._bind(obj, "I am args")()
/* 执行结果
* this: { name: '测试员小陈' }
* 我的名字: 测试员小陈
* 我接收的参数: I am args
*/本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!