此文首发于 https://lijing0906.github.io
前面已经讨论过bind()
的用法,这篇文章一步一步模拟实现bind()
。
bind特点
- 可以指定this
- 返回一个函数
- 可以传入参数
模拟实现第一步
Function.prototype.bind2 = function(context) {
var self = this; // this是调用bind2的对象
return function() {
// 返回一个函数
return self.apply(context); // 把this绑定给传入的上下文对象
}
}
// 测试
var foo = {
value: 2
}
var bar = function () {
console.log(this.value);
}
var bf = bar.bind2(foo);
console.log(bf()); // 2
模拟实现第二步----传参
先看一个例子,在bind()
的时候可以传参,在调用函数的又可以传参:
var foo = {
value: 2
}
function bar(name, age) {
console.log(this.value);
console.log(name);
console.log(age);
}
var bf = bar.bind(foo, 'Jane');
bf(20); // 2 Jane 20
// bar.bind(foo, 'Ja