实现js函数原型中的bind方法

开篇指引:首先我们需要知道js函数原型中bind方法的使用,它的第一个参数是一个对象作为需要改变函数中真实使用的对象,第二个参数是调用函数传给函数中使用的数据,这个参数可以是很多个

举个例子:

//自定义一个函数
function a(value1,value2){
    console.log(this,value1,value2)
}

a(1,2);  //window 1 2
//这里第一参数是一个数组,后面的参数就相对应的是value1,value2 a.bind([],1,2)(); //Array [] 1 2
a.bind([],1)(2); //Array [] 1 2

在bind当中返回的是一个可执行函数,所以bind()后面需要接一个执行括号,了解了函数原型方法bind的使用后,接下来就上实现代码了

//将自定义_bind函数保存到函数原型中,因为所有函数对象都是由函数原型创建
Function.prototype._bind = function (){
    //将函数对象保存到变量中
    let self = this;    
    //将当前函数中的arguments对象通过es6中的对象扩展运算符转化成数组对象(这样做便于使用数组对象中的方法操作数据)保存到变量中
    let obj = [...arguments];    
    //获取参数数组对象obj中除首个元素以外的数组对象
    let args = obj.slice(1);
    //返回一个可执行函数,使得函数对象调用_bind()方法时不直接执行原函数
    return function (){
        //使用函数对象中的apply方法,这里的arguments是当前函数的
        self.apply(obj[0],args.concat([...arguments]));
    }
}

猜你喜欢

转载自www.cnblogs.com/denghaopositive/p/12505032.html