📖bind方法做了什么事?
- bind方法指定源函数执行时的this对象,但它不像call和apply方法那样直接执行源函数,而是返回一个函数,需要调用才执行。
- 可在bind方法中传参,也可在执行返回函数时传参,传参形式与call方法一致,即一个一个的传。这两种方法传入的参数将按顺序作为源函数的参数(除了bind方法中的第一个参数,第一个参数是绑定的this)。
假如你还不知道如何手动实现call方法,建议先了解一下,便于理解接下来的代码
🐱传送门:通俗易懂之JavaScript手动实现call方法
手动实现bind代码展示:
function myBind(obj){
const target = obj || window;
const fn = Symbol('fn');
target[fn] = this;
const para1 = Array.from(arguments).slice(1);
return function(){
const para2 = Array.from(arguments);
const para = para1.concat(para2);
const result = target[fn](...para);
delete target[fn];
return result;
}
}
/***测试myBind***/
var obj1 = {name:'tom'};
function printName(p1,p2){
console.log(this.name,p1,p2);
}
Function.prototype.myBind = myBind;
printName.myBind(obj1,'good')('boy'); // 输出tom good boy
至此结束,与诸君共勉~