1.call()、apply()、bind() 都是用来重定义 this指向的
var name = '张三', age = 10;
var obj = {
name:'李四',
age:20,
objFun:function(){
console.log(this.name + '年龄' + this.age)
}
}
var pers = {
name: '王五',
age: 30
}
console.log(this.age) //10
console.log(obj.age) //20
obj.objFun.call(pers) //王五年龄30
obj.objFun.apply(pers) //王五年龄30
obj.objFun.bind(pers)() //王五年龄30
2.call()、apply()、bind() 的传参方式和返回
call 、bind 、 apply 这三个函数的第一个参数都是 this 的指向对象,第二个参数有点差别
var name = '张三', age = 10;
var obj = {
name:'李四',
age:20,
objFun:function(a,b){
console.log(this.name + '年龄:' + this.age + '身高:' + a + '体重:' + b)
}
}
var pers = {
name: '王五',
age: 30
}
obj.objFun.call(pers, 180, 120) //王五年龄:30身高:180体重:120
obj.objFun.apply(pers, [180, 120]) //王五年龄:30身高:180体重:120
obj.objFun.bind(pers, 180, 120)() //王五年龄:30身高:180体重:120
call按照函数入参依次传入,apply需将参数放在一个数组中一次性传入,bind返回时函数,入参方式和call相同