Movatterモバイル変換


[0]ホーム

URL:


  1. Веб-технологии для разработчиков
  2. JavaScript
  3. Справочник по JavaScript
  4. Стандартные встроенные объекты
  5. Reflect
  6. Reflect.construct()

This page was translated from English by the community.Learn more and join the MDN Web Docs community.

View in EnglishAlways switch to English

Reflect.construct()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨сентябрь 2016 г.⁩.

Статический методReflect.construct() работает какnew operator. Он эквивалентенnew target(...args). Это также даёт дополнительную возможность указать другой прототип.

Интерактивный пример

function func1(a, b, c) {  this.sum = a + b + c;}const args = [1, 2, 3];const object1 = new func1(...args);const object2 = Reflect.construct(func1, args);console.log(object2.sum);// Expected output: 6console.log(object1.sum);// Expected output: 6

Синтаксис

Reflect.construct(target, argumentsList[, newTarget])

Параметры

target

Целевая функция для вызова.

argumentsList

Массивоподобный объект указывающий аргументы, с которымиtarget должна вызываться.

newTargetНеобязательный

Конструктор, чей прототип должен быть использован. Смотрите такжеnew.target оператор. ЕслиnewTarget не указан, то используетсяtarget.

Возвращаемое значение

Новый экземплярtarget (илиnewTarget, если указан), инициализируетсяtarget как конструктор с заданными аргументами.

Исключения

ИсключениеTypeError, еслиtarget илиnewTarget не являются конструкторами.

Описание

Reflect.construct() позволяет вам вызывать конструктор с любым числом аргументов (что также возможно с использованиемspread syntax вместе сnew operator).

js
var obj = new Foo(...args);var obj = Reflect.construct(Foo, args);

Reflect.construct() противObject.create()

До появленияReflect, объекты могли быть созданы с использованием произвольной комбинации из конструктора и прототипа при помощиObject.create().

js
function OneClass() {  this.name = "one";}function OtherClass() {  this.name = "other";}// Данный вызов:var obj1 = Reflect.construct(OneClass, args, OtherClass);// ...будет аналогичен данному:var obj2 = Object.create(OtherClass.prototype);OneClass.apply(obj2, args);console.log(obj1.name); // 'one'console.log(obj2.name); // 'one'console.log(obj1 instanceof OneClass); // falseconsole.log(obj2 instanceof OneClass); // falseconsole.log(obj1 instanceof OtherClass); // trueconsole.log(obj2 instanceof OtherClass); // true

В любом случае, пока конечный результат один и тот же, существует одно важное отличие в этом процессе. При использованииObject.create() иFunction.prototype.apply(), операторnew.target будет указывать наundefined внутри функции используемой в качестве конструктора, пока ключевое словоnew не будет использовано для создания объекта.

С другой стороны, в случае вызоваReflect.construct(), операторnew.target будет указывать на параметрnewTarget если он задан, илиtarget в отличном случае.

js
function OneClass() {  console.log("OneClass");  console.log(new.target);}function OtherClass() {  console.log("OtherClass");  console.log(new.target);}var obj1 = Reflect.construct(OneClass, args);// Вывод://     OneClass//     function OneClass { ... }var obj2 = Reflect.construct(OneClass, args, OtherClass);// Вывод://     OneClass//     function OtherClass { ... }var obj3 = Object.create(OtherClass.prototype);OneClass.apply(obj3, args);// Вывод://     OneClass//     undefined

Примеры

ИспользованияReflect.construct()

js
var d = Reflect.construct(Date, [1776, 6, 4]);d instanceof Date; // trued.getFullYear(); // 1776

Спецификации

Specification
ECMAScript® 2026 Language Specification
# sec-reflect.construct

Совместимость с браузерами

Смотрите также

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp