在正常情况下,new.target
将是undefined
,构造函数或子类的类或它所在的函数或子类。
据说,Reflect.construct(target, argumentsList, newTarget=target)
相当于target.[[Construct]](CreateListFromArrayLike(argumentsList), newTarget)
。这允许我们将任意对象设置为new.target
。 [[Construct]]
内部方法可以说newTarget
(第二个参数):
第二个参数是最初应用new运算符的对象。
那么它是一个完全不同的价值意味着什么呢? (特别是对于内置功能)
例如,在控制台中:
>> Reflect.construct(String, [], String)
String { "", 1 more… }
>> Reflect.construct(String, [], Array)
String
>> let c = Reflect.construct(String, ['123'], Array); c
String
>> Object.getPrototypeOf(c) === Array.prototype
true
>> c.toSource()
"["1", "2", "3"]"
>> c = Reflect.construct(String, ['1', '2', '3'], Array);
>> // new Array('1', '2', '3') ??
>> c[1]
>> '2'
>> c.constructor
function Array()
>> // Seems that `String` has been totally discarded.
>> // So `newTarget` only makes sense for subclasses to emulate `super()`?