Movatterモバイル変換


[0]ホーム

URL:


MDN Web Docs

이 페이지는 영어로부터 커뮤니티에 의하여 번역되었습니다. MDN Web Docs에서 한국 커뮤니티에 가입하여 자세히 알아보세요.

Reflect.construct()

BaselineWidely available

Reflect.construct() 정적 메서드는new 연산자처럼 동작하는 함수입니다.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

구문

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

매개변수

target

호출할 대상 함수.

argumentsList

target의 매개변수로 전달할 배열형 객체.

newTargetOptional

프로토타입으로 사용할 생성자.new.target 연산자도 확인하세요.newTarget이 주어지지 않았을 땐target을 사용합니다.

반환 값

target을 생성자로 하고 주어진 매개변수를 전달해 생성한target(또는, 지정했다면newTarget)의 새로운 인스턴스.

예외

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";}// Calling this:var obj1 = Reflect.construct(OneClass, args, OtherClass);// ...has the same result as this: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()를 호출하면,newTarget이 존재하면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);// Output://     OneClass//     function OneClass { ... }var obj2 = Reflect.construct(OneClass, args, OtherClass);// Output://     OneClass//     function OtherClass { ... }var obj3 = Object.create(OtherClass.prototype);OneClass.apply(obj3, args);// Output://     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