全局上下文:
this = window
函数上下文:
浏览器:this = window node.js中this = global
浏览器函数中的this取决于函数的被调用方式
直接调用的话this = 全局window
使用call(obj)或者apply(obj)的话 this等于传入的第一个参数obj. 因为这两个方法可以改变被调函数中this的指向
箭头函数:
在箭头函数中this与封闭词法环境的this保持一致,他将被设置为全局对象:this = window。
无论如何,箭头函数中的this都是被设置为他被创建的环境,apply() call() bind() 无法改变箭头函数中的this指向。
类上下文:
this 在 类 中的表现与在函数中类似,因为类本质上也是函数,但也有一些区别和注意事项。
在类的构造函数中,this是一个常规对象,类中的所有非静态的方法都会被添加到this的原型中。
派生类:
不像基类的构造函数,派生类的构造函数没有初始化this绑定,如果想初始化this就需要在构造函数中调用一下super()
bind方法:
function f() {return this.a}; f.bing({a: "azerty"}), 调用f.bind(someobj)d会创建一个与f具有相同的函数体和作用域的函数,在这个新函数中,this会永久绑定到bind的第一个参数中,无论后续使用多少次bind(),call(),apply(),都无法改变这个新函数中的this指向。