Movatterモバイル変換


[0]ホーム

URL:


MDN Web Docs

Эта страница была переведена с английского языка силами сообщества. Вы тоже можете внести свой вклад, присоединившись к русскоязычному сообществу MDN Web Docs.

Reflect.construct()

BaselineWidely available

Статический метод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