Этот запутанный бит о том, что NewTarget
, я думаю, является ключом к головоломке.Это правило в основном означает:
- Если
Array
вызывается как простая функция, тогда значение newTarget
является конструктором Array
- Если
Array
вызывается как new Array
, тогда значение newTarget
также является конструктором Array
Почему?Хорошо, когда вызывается операция [[Construct]]
, второй аргумент дает newTarget
.Вызовы операции [[Construct]]
передают саму функцию конструктора в качестве этого аргумента.Однако простой вызов Array
не включает эту операцию;это просто равнина [[Call]]
.Таким образом, в этом случае NewTarget
- это undefined
, и поэтому правило гласит, что newTarget
- это «контекст активной функции».Поскольку мы говорим о том, что происходит в конструкторе Array
, очевидно, что активная функция является контекстом этой функции;иначе зачем нам читать эту главу спецификации?
Почему это так сформулировано?Понятия не имею.