this的指向

76 阅读1分钟
  • 全局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)