Baseline Widely 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: 6
console.log(object1.sum);
// Expected output: 6
æ§æ
Reflect.construct(target, argumentsList);
Reflect.construct(target, argumentsList, newTarget);
弿°
target
å¼ã³åºã対象ã®é¢æ°ã
argumentsList
é
å風ãªãã¸ã§ã¯ãã§ã target
ã®å¼ã³åºãã®å¼æ°ãæå®ããã
newTarget
çç¥å¯
ãããã¿ã¤ãã使ç¨ããã³ã³ã¹ãã©ã¯ã¿ã¼ã new.target
ãåç
§ãã¦ãã ããã newTarget
ãåå¨ããªãå ´åã¯ãæ¢å®å¤ã¯ target
ã«ãªãã¾ãã
target
(ã¾ãã¯ãããããã° newTarget
) ã®æ°ããã¤ã³ã¹ã¿ã³ã¹ã§ã target
ã« argumentsList
ãæ¸¡ãã¦ã³ã³ã¹ãã©ã¯ã¿ã¼ã¨ãã¦å¼ã³åºããã¨ã§åæåãã¾ãã
TypeError
: target
ã¾ã㯠newTarget
ãã³ã³ã¹ãã©ã¯ã¿ã¼ã§ã¯ãªãå ´åã
Reflect.construct()
ã«ãã£ã¦ãå¯å¤é·å¼æ°ãæå®ãã¦ã³ã³ã¹ãã©ã¯ã¿ã¼ãå¼ã³åºããã¨ãã§ãã¾ãã (ããã¯ã¹ãã¬ããæ§æã¨new
æ¼ç®åãçµã¿åããã¦ä½¿ç¨ãããã¨ã§ãå¯è½ã§ãã)
let obj = new Foo(...args);
let obj = Reflect.construct(Foo, args);
Reflect.construct()
㨠Object.create()
Reflect
ãå°å
¥ãããåã¯ããªãã¸ã§ã¯ããæ§ç¯ããã®ã«ã³ã³ã¹ãã©ã¯ã¿ã¼ã¨ãããã¿ã¤ãã®ä»»æã®çµã¿åããã§ Object.create()
ã使ç¨ãã¦æ§ç¯ãããã¨ãã§ãã¾ããã
function OneClass() {
this.name = "one";
}
function OtherClass() {
this.name = "other";
}
// Calling this:
let obj1 = Reflect.construct(OneClass, args, OtherClass);
// ...has the same result as this:
let 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
//Another example to demonstrate below:
function func1(a, b, c, d) {
console.log(arguments[3]);
}
function func2(d, e, f, g) {
console.log(arguments[3]);
}
let obj1 = Reflect.construct(func1, ["I", "Love", "my", "India"]);
obj1;
ãã® 2 ã¤ã®ææ³ã®æçµçµæã¯åãã§ããããã®éç¨ã«éè¦ãªéããããã¾ãã Object.create()
㨠Function.prototype.apply()
ã使ç¨ããå ´åã new.target
æ¼ç®åã¯ã³ã³ã¹ãã©ã¯ã¿ã¼å
ã§ undefined
ãè¿ãã¾ããããã¯ã new
æ¼ç®åãç¨ããªãããã§ãã
䏿¹ã Reflect.construct()
ãå¼ã³åºãå ´åã¯ã new.target
æ¼ç®åã¯ãæä¾ããã¦ããã° newTarget
ãæããããã§ãªããã° target
ãæãã¾ãã
function OneClass() {
console.log("OneClass");
console.log(new.target);
}
function OtherClass() {
console.log("OtherClass");
console.log(new.target);
}
let obj1 = Reflect.construct(OneClass, args);
// Output:
// OneClass
// function OneClass { ... }
let obj2 = Reflect.construct(OneClass, args, OtherClass);
// Output:
// OneClass
// function OtherClass { ... }
let obj3 = Object.create(OtherClass.prototype);
OneClass.apply(obj3, args);
// Output:
// OneClass
// undefined
ä¾ Reflect.construct()
ã®ä½¿ç¨
let d = Reflect.construct(Date, [1776, 6, 4]);
d instanceof Date; // true
d.getFullYear(); // 1776
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ
å ±
Reflect.construct
ã®ããªãã£ã«ã core-js
ã«ããã¾ãReflect
new
new.target
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4