函数调用时的this实际上是在函数被调用时发生绑定,它指向什么完全取决于函数在哪里被调用。
特例:当函数作为构造函数被调用时,即使用new 来构造一个新对象,会自动执行以下操作:
【1】创建一个新对象;
【2】这个新对象会被执行原型连接;(即新对象的__proto__会指向构造函数的prototype对象)
【3】这个新对象会绑定到函数体中的this;
【4】如果函数没有返回其他对象,那么new表达式中的函数会自动返回这个新对象。“构造函数”显示地返回一个对象,则会以返回的对象为准,如果“构造函数”返回“string、number、boolean、null、undefined、symbol,等premitive原始数据类型,则忽略该返回值并返回新对象。
判断函数中this对象的绑定准则:
- 由new调用?绑定到新创建的对象
- 由call或者apply(或者bind)调用?绑定到指定对象
- 由上下文对象调用?绑定到那个上下文对象。
- 默认:在严格模式下绑定到undefined,否则绑定到全局对象
- 箭头函数中的this,会通过词法作用域指向该函数定义时的上下文对象,而非调用时动态绑定。