- 全局this:无论是否严格,window
- 全局函数中的this:普通函数,调用的非严格模式:window,严格模式:undefined,取决于调用对象,一般都是直接全局调用函数
- 类中的this:本质上也是函数,取决于调用对象
- 构造函数this:常规对象,所有的非静态方法添加到this的原型上;
- 静态方法是类自身的属性,不是this的属性;
- 取决于方法如何被调用
- 派生类中this:
- 构造函数:不同于基类,没有this,调用super,相当于this = new Base(),生成this对象
- super之前调用this,会抛出错误
- 取决于方法怎么被调用
- 箭头函数中this
- 从自己作用域链的上一层继承this
- 没有绑定自己的this,arugments,无prototype属性,和new用会报错
- bind,call,apply使用只能传递参数,不能绑定this,只能传递参数
var obj = { bar: function() { return () => this; } }; obj.bar(); // obj const a = obj.bar a() // window - 对象的方法中this
- 调用的对象,决定当前的this,看方法前的对象是什么
- setter和getter中的this
- 设置/获取的当前对象,比如a.b,b是setter,setter中的this就是this;
- 构造函数中的this
不是只有class才有构造函数- 构造函数默认返回是this;可手动返回其他对象,返回不是对象,默认为this
- DOM事件处理函数中的this
- 触发事件的元素
- DOM内联函数中的this
- 当前内联的dom对象
- 改变this方法的办法
- bind:绑定this
- apply:绑定this,第一个参数非obj,会被转化成ob就,7 -> Number(7)
- call:绑定this,第一个参数非obj,会被转化成ob就,7 -> Number(7)