bind()是在ECMAScript5中新增的方法,用于将一个函数绑定到一个对象,成为其方法,还可以用于构造函数。
const obj = {
sum:20,
getSum: function() {
return this.sum;
}
};
const getSum = obj.getSum;
console.log(getSum()); //undefined
上面代码输出了undefined,getSum()执行时内部的this指向了window,而window并没有sum这个属性。接下来当调用getSum方法的时候我希望它能输出sum的值。
const getSum = obj.getSum.bind(obj);
自己实现一个bind函数
实现一个bind需要两个功能,返回一个函数,绑定this,传递参数
function bind(fn, ctx) {
return function wrap() {
let args = new Array(arguments.length);
for(let i = 0; i < args.length; i++) {
args[i] = arguments[i];
}
return fn.apply(ctx, args);
}
}
const obj = {
sum:20,
getSum: function() {
return this.sum;
}
};
const getSum = bind(obj.getSum, obj);
console.log(getSum()); //20