同样是对之前知识的查缺补漏

call,apply,bind都可以用来指定this的值。 举例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
const xw = {
    name:'小王',
    gender:'男',
    age:18,
    say:function(city,university){
        console.log(`${this.gender}${this.name},${this.age},${city}${university}上学`)
    }
}
const xh = {
    name:'小红',
    gender:'女',
    age:17
}

xw.say(‘南京’,'南京大学') 得到“男生小王,18岁,在南京市南京大学上学”,这里的this就指向xw。

要把this变为xh,得到“女生小红,17岁,在北京市北京大学上学”就可以用call,apply,bind了,以下是用法和区别

call

xw.say.call(xh,'北京','北京大学') call后面跟着的第一个参数就是要指定的this,后面的参数与xw.say方法是一一对应的

apply

xw.say.apply(xh,['北京','北京大学']) say后面跟着的第一个参数也是要指定的this,与call的区别在于后面的第二个参数是一个数组,数组中的元素与xw.say方法一一对应

bind

xw.say.bind(xh,'北京','北京大学')() bind的传参方式与call一致,区别在于它返回的是一个函数,所以要再加()来调用 它也可以写成xw.say.bind(xh)('北京','北京大学')(这是因为bind返回的是一个函数,我们仍可以在调用的时候传参)