它们都可以改变当前对象的this指向问题
let obj = {
name: this.name,
age: this.age,
objFun: function(fm, t) {
console.log(`姓名:${this.name}, 年龄:${this.age}, 来自:${fm}, 去:${t}`);
}
}
let my = {
name: 'Guoda',
age: 99
}
obj.objFun.call(my, '河南', '北京')
obj.objFun.apply(my, ['河南', '北京'])
obj.objFun.bind(my, '河南', '北京')()
obj.objFun.bind(my, ['河南', '北京'])()
根据控制台输出:
14----姓名:Guoda, 年龄:99, 来自:河南, 去:北京
15----姓名:Guoda, 年龄:99, 来自:河南, 去:北京
16----姓名:Guoda, 年龄:99, 来自:河南, 去:北京
17----姓名:Guoda, 年龄:99, 来自:河南,北京, 去:undefined
从上面结果可以看出:
call 、bind 、 apply 这三个函数的第一个参数都是 this 的指向对象,差别在于第二个参数
call 的参数是直接放进去的,第二,第三,第 n 个参数,全都用逗号分隔,直接放在后面。
apply 的所有参数都必须放在一个数组里面传进去。
bind 除了返回是函数以外,它的参数和 call 一样。