什么是this
函数中使用this来调用还不知道名字的对象的属性值,在被对象调用时,this里的值就是对象的地址,使用this来获取对未知对象的引用。
如何修改this指向
fn.bind() fn.call() fn.apply() 第一个参数都是this的指向
区别
- bind有返回值 返回值是调用bind方法的函数本身 传参跟call一样
- call 没有返回值 其他参数以散落的形式传递给函数作为实参 用逗号隔开
- apply 没有返回值 其他参数以数组的形式传递给函数作为实参
怎么判断this指向
this指向在函数运行时被确定,而不是在定义时被确定。
1 默认绑定
函数被全局对象调用,那么就指向window(箭头函数,立即指向函数,默认函数)
2 隐式绑定
对象方法中调用,this指向当前对象(谁调用就指向谁)
3 new绑定
没有return的构造函数中的this,指向构造函数实例
构造函数中带return,返回值若是对象,this指向的是那个返回的对象,否则this还是指向那个构造函数实例
这里牵扯到构造函数中return的问题
1 构造函数在没有指定返回值的情况下,默认会返回新对象实例。
2 如果指定的返回值是基本数据类型的话,仍然会返回新对象实例。
3 如果指定返回对象了的话,被返回的对象就成了指定的对象值。在这种情况下,this值所引用的对象就被丢弃了。
4 事件绑定
this指向绑定的事件对象
5 箭头函数 this为父级上下文中的this
定义函数的时候才能确定自身this指向