new.target
当调用函数的[[construct]]方法:
new.target被赋值为new操作符的目标,通常是新创建对象的实例,也就是函数体内this的构造函数.
调用的是[[call]]方法:
new.target=undefined
检查new.target是否被某个特定构造函数是调用:
function Person(name) {
if (new.target === Person) {
this.name = name; // using new
} else {
throw new Error("You must use new with Person.")
}
}
function AnotherPerson(name) {
Person.call(this, name);
}
var person = new Person("Nicholas");
var anotherPerson = new AnotherPerson("Nicholas"); // error!
代码中new.target必须为Person, Person.call(this, name)没有使用new所以报错。