x-note
Search…
ECMAScript 6 new.target
new.target属性允许你检测函数或构造方法是否通过new运算符调用。在通过new运算符实例化的函数或构造方法内,new.target返回一个指向构造方法或函数的引用。而在正常的函数调用中,new.targetundefined
.运算符通常用访问一个对象的属性,然而new.target中的new并不是一个真正的对象。
new.target属性适用于所有函数访问的元属性。
由于箭头函数自身不包含thisargumentsuper甚至是new.target,所以箭头函数中的new.target总是指向最近的函数。
示例:
1
function Foo() {
2
if (!new.target) throw "Foo() must be called with new";
3
}
4
5
Foo(); // throws "Foo() must be called with new"
6
new Foo();
7
8
class A {
9
constructor() {
10
console.log(new.target.name);
11
}
12
}
13
14
class B extends A {
15
constructor() {
16
super();
17
}
18
}
19
20
new A(); // A
21
new B(); // B
22
23
24
function fn () {
25
const arrFn = () => {
26
console.log(new.target.name)
27
}
28
return arrFn();
29
}
30
31
new fn(); // fn
32
fn(); // TypeError: Cannot read property 'name' of undefined
33
// target is undefined
Copied!
Copy link