什么`Reflect.construct`的'newTarget`参数在通常不可能的情况下做什么?

时间:2017-10-15 20:41:46

标签: javascript class

在正常情况下,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()`?

0 个答案:

没有答案