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)를 í¸ì¶íë ê²ê³¼ ê°ìµëë¤. ì¶ê° 기ë¥ì¼ë¡ ë¤ë¥¸ íë¡í íì
ì ì§ì í ìë ììµëë¤.
ìëí´ ë³´ê¸°
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: 6
console.log(object1.sum);
// Expected output: 6
구문
Reflect.construct(target, argumentsList[, newTarget])
매ê°ë³ì
target-
í¸ì¶í ëì í¨ì.
argumentsList-
targetì 매ê°ë³ìë¡ ì ë¬í ë°°ì´í ê°ì²´. newTargetOptional-
íë¡í íì ì¼ë¡ ì¬ì©í ìì±ì.
new.targetì°ì°ìë íì¸íì¸ì.newTargetì´ ì£¼ì´ì§ì§ ììì ëtargetì ì¬ì©í©ëë¤.
ë°í ê°
targetì ìì±ìë¡ íê³ ì£¼ì´ì§ 매ê°ë³ì를 ì ë¬í´ ìì±í target(ëë, ì§ì íë¤ë©´ newTarget)ì ìë¡ì´ ì¸ì¤í´ì¤.
ìì¸
target ëë newTargetì´ ìì±ìê° ìëë©´ TypeError.
ì¤ëª
Reflect.construct()ë ìì±ì를 ê°ë³ 길ì´ì 매ê°ë³ìë¡ í¸ì¶í ì ììµëë¤. (new ì°ì°ìì ì ê° êµ¬ë¬¸ì ì¬ì©í´ë ê°ë¥í©ëë¤)
var obj = new Foo(...args);
var obj = Reflect.construct(Foo, args);
Reflect.construct() vs Object.create()
Reflectì ëì
ì´ì ìë ììì ìì±ìì íë¡í íì
ì Object.create()를 ì¬ì©í´ ê°ì²´ë¥¼ ìì±í ì ìììµëë¤.
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); // false
console.log(obj2 instanceof OneClass); // false
console.log(obj1 instanceof OtherClass); // true
console.log(obj2 instanceof OtherClass); // true
ê·¸ë¬ë, ê²°ê³¼ë ëì¼íëë¼ë ê³¼ì ìë ì¤ìí ì°¨ì´ê° íë ì¡´ì¬í©ëë¤. Object.create()ì Function.prototype.apply()를 ì¬ì©í ë, ê°ì²´ ìì±ì new í¤ìëê° ê´ì¬íì§ ìì¼ë¯ë¡ new.target ì°ì°ìê° undefined를 ê°ë¦¬íµëë¤.
ë°ë©´ Reflect.construct()를 í¸ì¶íë©´, newTargetì´ ì¡´ì¬íë©´ new.target ì°ì°ìê° newTargetì, ìëë©´ targetì ê°ë¦¬íµëë¤.
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() ì¬ì©í기
var d = Reflect.construct(Date, [1776, 6, 4]);
d instanceof Date; // true
d.getFullYear(); // 1776
ëª ì¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-reflect.construct> |