call、apply和bind的相同点和区别理解

109 阅读1分钟

举2个例子来看下this的指向,例一方法里面的this指向的是obj,例二方法里面指向的是window。

image.png

可以看到例二获取basic对象的good属性为undefined,因为此时函数里面的this指向的是window, 那么如何拿到basic对象里面的属性的值呢?

1.使用call、apply和bind

image.png

此时可以看到使用call、apply、bind之后this指向已经变成basic对象了,除了bind方法后面多了一个(),返回得到的结果都一样。由于bind方法返回的是一个新的函数,所以需要调用它才会执行。

2.区别点

image.png

从上例可以看出,call,bind,apply第一个参数都是this指向对象,区别点在于第二个参数。

a、call是参数列表,以逗号隔开,语法是“函数名.call(对象,参数1,参数2...)”

b、bind与call一样,区别在于返回的是函数,语法是“函数名.call(对象,参数1,参数2...)()”

c、apply则是所有参数必须放在一个数组里面传入,语法是“函数名.call(对象,[参数1,参数2...])”