js之手写bind()函数

157 阅读1分钟

js中bind的用法

var xw = {
            name: "张三",
            gender: "男",
            age: 24,
            say: function (school, grade) {
                console.log(this.name + " , " + this.gender + " ,年龄" + this.age + " ,在" + school + "上" + grade);
            }
        }
        var xh = {
            name: "李四",
            gender: "女",
            age: 18 
        }
        
      xw.say.bind(xh,'清华',小学)() //或者
      xw.say.bind(xh)('清华',小学)

使用bind()函数时,后面不加()返回的是一个函数体,而call()和apply()则是直接执行了函数 下面就是我对bind()实现的一些理解:

  Function.prototype.bind2 = function (...context) {
            let that = this 
            let value = context.slice(1) //获取bind(this,参数1,参数2)()传入的参数
            return function () {
                let data = [].slice.call(arguments) //将类数组arguments转为真正的数组,并且获取bind(this)(参数1,参数2)传入的参数
                that.apply(context[0], [...data, ...value]) //合并两次传入的参数并调用apply()方法
            }
        }

这样就简单的实现了一个bind2()方法,调用的时候和bind()方法一样使用