一、文字描述:
1、相同点:
三个函数都会改变this的指向(调用这三个函数的函数内部的this)
2、不同点:
1)、bind会产生新的函数,(把对象和函数绑定死后,产生新的函数)
2)、call和apply不会产生新的函数,只是在调用时,绑定一下而已。
3)、call和apply的区别,第一个参数都是要绑定的this,apply第二个参数是数组(是函数的所有参数),call把apply的第二个参数单列出来。
二、示例代码:
// 示例代码:*/
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同理,只是第二个参数是数组