举2个例子来看下this的指向,例一方法里面的this指向的是obj,例二方法里面指向的是window。
可以看到例二获取basic对象的good属性为undefined,因为此时函数里面的this指向的是window, 那么如何拿到basic对象里面的属性的值呢?
1.使用call、apply和bind
此时可以看到使用call、apply、bind之后this指向已经变成basic对象了,除了bind方法后面多了一个(),返回得到的结果都一样。由于bind方法返回的是一个新的函数,所以需要调用它才会执行。
2.区别点
从上例可以看出,call,bind,apply第一个参数都是this指向对象,区别点在于第二个参数。
a、call是参数列表,以逗号隔开,语法是“函数名.call(对象,参数1,参数2...)”
b、bind与call一样,区别在于返回的是函数,语法是“函数名.call(对象,参数1,参数2...)()”
c、apply则是所有参数必须放在一个数组里面传入,语法是“函数名.call(对象,[参数1,参数2...])”