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()方法一样使用