1. 文字描述
- 相同点
三者都会改变this指向(调用函数内部this)
- 不同点
- Bind绑定对象后,会产生一个新函数;
- Call和Apply不会产生新函数,只是调用时绑定一下而已;
- Apply第一个参数是绑定对象,第二个参数是数组(是函数的所有参数);
- Call第一个参数是要绑定的对象,第二个以后为函数的所有参数。
2. 代码演示
// 示例代码:*/
var obj1 = {
name: 'navy',
}
function fn (num, str){
console.log(`${this.name}的个子有${num}厘米, ${str}`)
}
// 1、bind:
let f1 = fn.bind(obj1) // fn将obj1绑定后,会生产一个新f1
f1('175', '正正好') // 绑定obj1,就相当于 obj1.fn();内部的this指向就是obj1,永远都是obj1,不会是window
// 2、call:
fn.call(obj1, 180, '好高啊,多少迷妹喜欢!') // 不会产生新的函数,只是进行绑定。
// 3、apply:
fn.apply(obj1, [195, '完蛋,太高了,不好找对象。']) // 与call同理,只是第二个参数是数组