0%

new.target是个啥

总结

new.target 可以用来判断是不是通过 new 调用的该方法

今天在看 Node.JS 源码的时候,发现一个没见过的写法 new.target

1
2
3
4
5
6
7
8
9
function Console(options /* or: stdout, stderr, ignoreErrors = true */) {
// We have to test new.target here to see if this function is called
// with new, because we need to define a custom instanceof to accommodate
// the global console.
if (!new.target) {
return ReflectConstruct(Console, arguments)
}
// ...
}

当通过 new 关键词调用一个方法的时候 new.target 指向当前这个方法,可以用来判断是不是通过 new 操作调用的。

image-20210415174011971

以前通过 this instanceof F 来判断,但是 instanceof 是可以通过外力改变他的表现形式的。

image-20210415174043023