ES6 new.target

当代码 new foo(...) 执行时:
  1. 一个新对象被创建。它继承自 foo.prototype.
  2. 构造函数 foo 被执行。执行的时候,相应的传参会被传入,同时上下文(this)会被指定为这个新实例。
  3. 如果构造函数返回了一个"对象",那么这个对象会取代整个 new 出来的结果。如果构造函数没有返回对象,那么 new 出来的结果为步骤1创建的对象

如果函数是使用 new 运算符调用,则函数中的 new.target 指向函数,否则为 undefined

在 ES6 的类(class)构造函数方法中,new.target 指向直接被 new 执行的 constructor()(然而其 name 还是 class name)// 在原型连上的 new.target 也为 new 后面的构造函数

箭头函数中,new.target 指向外围函数的 new.target。

另:声明式定义函数 function a(){} 的 function name 为 a。
new 运算符为构造函数(可以只是一个函数)新建一个对象并指定其为构造函数的上下文。
arguments(函数内部变量)的callee属性指向当前函数,然而推荐用函数名,严格模式已禁用。
arguments.callee.caller(即Function的caller属性)以废弃