new.target
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2017ë 9ì.
new.target ìì±(property)ì í¨ì ëë ìì±ìê° new ì°ì°ì를 ì¬ì©íì¬ í¸ì¶ëëì§ë¥¼ ê°ì§í ì ììµëë¤. new ì°ì°ìë¡ ì¸ì¤í´ì¤íë ìì±ì ë° í¨ììì, new.targetì ìì±ì ëë í¨ì 참조를 ë°íí©ëë¤. ì¼ë° í¨ì í¸ì¶ììë, new.targetì undefinedì
ëë¤.
ìëí´ ë³´ê¸°
function Foo() {
if (!new.target) {
throw new TypeError("calling Foo constructor without new is invalid");
}
}
try {
Foo();
} catch (e) {
console.log(e);
// Expected output: TypeError: calling Foo constructor without new is invalid
}
구문
new.target;
ì¤ëª
new.target 구문ì í¤ìë "new", ì ë° ìì±ëª
"target"ì¼ë¡ 구ì±ë©ëë¤. ë³´íµ "new."ì ìì± ì ê·¼ì ìí 문맥(context)ì¼ë¡ ì ê³µíì§ë§ ì¬ê¸°ì "new."ì ì ë§ ê°ì²´ê° ìëëë¤. ê·¸ë¬ë, ìì±ì í¸ì¶ìì new.targetì newì ìí´ í¸ì¶ë ìì±ì를 ê°ë¦¬í¤ê³ ê·¸ëì "new."ì ê°ì ë¬¸ë§¥ì´ ë©ëë¤.
new.target ìì±ì 모ë í¨ìê° ì´ì©í ì ìë ë©í ìì±ì
ëë¤. íì´í í¨ììì, new.targetì ëë¬ì¸ë í¨ìì new.targetì ë§í©ëë¤.
ì
>í¨ì í¸ì¶ìì new.target
ì¼ë° í¨ì í¸ì¶(ìì±ì í¨ì í¸ì¶ê³¼ë ë°ëë¡)ìì, new.targetì undefinedì
ëë¤. ì´ë í¨ìê° ìì±ìë¡ì newë¡ í¸ì¶ë ê²½ì°ë¥¼ ê°ì§í ì ììµëë¤.
function Foo() {
if (!new.target) throw "Foo() must be called with new";
console.log("Foo instantiated with new");
}
Foo(); // throws "Foo() must be called with new"
new Foo(); // logs "Foo instantiated with new"
ìì±ììì new.target
í´ëì¤ ìì±ììì, new.targetì newì ìí´ ì§ì í¸ì¶ë ìì±ì를 ê°ë¦¬íµëë¤. ì´ë ê·¸ ìì±ìê° ë¶ëª¨ í´ëì¤ì ìê³ ìì ìì±ìë¡ë¶í° ììë°ì ê²½ì°ë ê·¸ ê²½ì°ì
ëë¤.
class A {
constructor() {
console.log(new.target.name);
}
}
class B extends A {
constructor() {
super();
}
}
var a = new A(); // logs "A"
var b = new B(); // logs "B"
ëª ì¸ì
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-built-in-function-objects> |