Movatterモバイル変換


[0]ホーム

URL:


  1. 面向开发者的 Web 技术
  2. JavaScript
  3. JavaScript 参考
  4. JavaScript 标准内置对象
  5. Reflect
  6. Reflect.construct()

此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

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年9月⁩.

Reflect.construct() 方法的行为有点像new 操作符 构造函数,相当于运行new target(...args).

语法

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

参数

target

被运行的目标构造函数

argumentsList

类数组,目标构造函数调用时的参数。

newTarget可选

作为新创建对象的原型对象的constructor 属性,参考new.target 操作符,默认值为target

返回值

target(如果newTarget存在,则为newTarget)函数为构造函数,argumentList为其初始化参数的对象实例。

异常

如果 target 或者 newTarget 不是构造函数,抛出TypeError,异常。

描述

Reflect.construct允许你使用可变的参数来调用构造函数,这和使用new 操作符搭配对象展开符调用一样。

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

Reflect.construct() vsObject.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操作符调用构造函数,构造函数内部的new.target值会指向undefined

当调用Reflect.construct()来创建对象,new.target值会自动指定到target(或者 newTarget,前提是 newTarget 指定了)。

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