JavaScript中的this

91 阅读2分钟

什么是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指向