Baseline Widely available
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 æä½ç¬¦æé
对象å±å¼ç¬¦è°ç¨ä¸æ ·ã
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";
}
// å建ä¸ä¸ªå¯¹è±¡ï¼
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); // 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()
æ¥å建对象ï¼new.target
å¼ä¼èªå¨æå®å°target
ï¼æè
newTargetï¼åææ¯ newTarget æå®äºï¼ã
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()
var d = Reflect.construct(Date, [1776, 6, 4]);
d instanceof Date; // true
d.getFullYear(); // 1776
è§è æµè§å¨å
¼å®¹æ§ åè§
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