new æ¼ç®å
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2015å¹´7æ.
new æ¼ç®åã使ç¨ããã¨ãéçºè
ã¯ã¦ã¼ã¶ã¼å®ç¾©ã®ãªãã¸ã§ã¯ãåãã³ã³ã¹ãã©ã¯ã¿ã¼é¢æ°ãæã¤çµã¿è¾¼ã¿ãªãã¸ã§ã¯ãåã®ã¤ã³ã¹ã¿ã³ã¹ã使ãããã¨ãã§ãã¾ãã
試ãã¦ã¿ã¾ããã
function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
const car1 = new Car("Eagle", "Talon TSi", 1993);
console.log(car1.make);
// äºæ³ãããçµæ: "Eagle"
æ§æ
new constructor
new constructor()
new constructor(arg1)
new constructor(arg1, arg2)
new constructor(arg1, arg2, /* â¦, */ argN)
弿°
constructor-
ãªãã¸ã§ã¯ãã¤ã³ã¹ã¿ã³ã¹ã®åãè¦å®ããã¯ã©ã¹ã¾ãã¯é¢æ°ããã®å¼ã¯ãååãªåªå é ä½ãæã¤ãã®ãªãã°ä½ã§ããããä¾ãã°èå¥ããããããã£ã¢ã¯ã»ã¹ãå¥ã®
newå¼ã§ãæ§ãã¾ãããããªãã·ã§ãã«ãã§ã¼ã³ã¯è¨±å¯ããã¾ããã arg1,arg2, â¦,argN-
constructorãå¼ã³åºãããéã®å¼æ°ã®ãªã¹ãã§ããnew Fooã¯new Foo()ã¨åçã§ããã¤ã¾ãã弿°ã®ãªã¹ããæå®ããã¦ããªãå ´åãFooã¯å¼æ°ãªãã§å¼ã³åºããã¾ãã
解説
颿°ã new ãã¼ã¯ã¼ãä»ãã§å¼ã³åºãããã¨ããã®é¢æ°ã¯ã³ã³ã¹ãã©ã¯ã¿ã¼ã¨ãã¦ä½¿ç¨ããã¾ãã new ã¯æ¬¡ã®ãã¨ãè¡ãã¾ãã
-
空ã®ãã¬ã¼ã³ãª JavaScript ãªãã¸ã§ã¯ããçæãã¾ãã便å®ä¸ãããã
newInstanceã¨å¼ã³ã¾ãããã -
newInstanceã® [[Prototype]] ãããã®ã³ã³ã¹ãã©ã¯ã¿ã¼é¢æ°ã®prototypeãObjectã§ããã°ããã®prototypeãæãããã«è¨å®ãã¾ããããã§ãªãå ´åãnewInstanceã¯Object.prototypeã [[Prototype]] ã¨ãã¦ããã¬ã¼ã³ãªãªãã¸ã§ã¯ãã®ã¾ã¾ã«ãã¾ããã¡ã¢: ãããã£ã¦ãã³ã³ã¹ãã©ã¯ã¿ã¼é¢æ°ã®
prototypeããããã£ã«è¿½å ãããããããã£ããªãã¸ã§ã¯ãã¯ããã®ã³ã³ã¹ãã©ã¯ã¿ã¼é¢æ°ãã使ããããã¹ã¦ã®ã¤ã³ã¹ã¿ã³ã¹ããã¢ã¯ã»ã¹å¯è½ã§ãã -
newInstanceãthisã³ã³ããã¹ãã¨ãã¦ãã¤ã³ãããæå®ããã弿°ã§ã³ã³ã¹ãã©ã¯ã¿ã¼é¢æ°ãå®è¡ãã¾ãï¼ã¤ã¾ããã³ã³ã¹ãã©ã¯ã¿ã¼é¢æ°å ã®thisã¸ã®ãã¹ã¦ã®åç §ã¯ãnewInstanceãåç §ããããã«ãªãã¾ãï¼ã -
ã³ã³ã¹ãã©ã¯ã¿ã¼é¢æ°ãããªããã£ã以å¤ãè¿ããå ´åã¯ããã®è¿å¤ã
newå¼å ¨ä½ã®çµæã¨ãªãã¾ãããã以å¤ã®å ´åãã³ã³ã¹ãã©ã¯ã¿ã¼é¢æ°ãä½ãè¿ããªãã£ããããªããã£ãå¤ãè¿ãããããã¨ã代ããã«newInstanceãè¿ããã¾ãã ï¼é常ãã³ã³ã¹ãã©ã¯ã¿ã¼ã¯å¤ãè¿ãã¾ããããã ããé常ã®ãªãã¸ã§ã¯ã使ããã»ã¹ã䏿¸ãããããã«å¤ãè¿ããã¨ãé¸ã¹ã¾ããï¼
ã¯ã©ã¹ã¯ new æ¼ç®åãã¤ããªãã¨ã¤ã³ã¹ã¿ã³ã¹åãããã¨ã¯ã§ãã¾ãããnew ãªãã§ã¯ã©ã¹ãå¼ã³åºããã¨ãã㨠TypeError ãçºçãã¾ãã
ã¦ã¼ã¶ã¼å®ç¾©ã®ãªãã¸ã§ã¯ããçæããã«ã¯ã2 ã¤ã®ã¹ããããå¿ è¦ã§ãã
-
ãªãã¸ã§ã¯ãã®ååã¨ããããã£ãæå®ãã颿°ãæ¸ããã¨ã§ããªãã¸ã§ã¯ãã®åãå®ç¾©ãã¾ãã ä¾ãã°ããªãã¸ã§ã¯ã
Fooãçæããã³ã³ã¹ãã©ã¯ã¿ã¼é¢æ°ã¯ä»¥ä¸ã®ããã«ãªãã¾ããjsfunction Foo(bar1, bar2) { this.bar1 = bar1; this.bar2 = bar2; } -
newæ¼ç®åã使ç¨ãã¦ããªãã¸ã§ã¯ãã®ã¤ã³ã¹ã¿ã³ã¹ãçæãã¾ããjsconst myFoo = new Foo("Bar 1", 2021);
ã¡ã¢: ãªãã¸ã§ã¯ãã¯ãå¥ã®ãªãã¸ã§ã¯ããã®ãã®ãããããã£ã¨ãã¦æã¤ãã¨ãã§ãã¾ãã以ä¸ã®ä¾ãåç §ãã¦ãã ããã
以åå®ç¾©ãããªãã¸ã§ã¯ãã¤ã³ã¹ã¿ã³ã¹ã«ããã¤ã§ãããããã£ã追å ã§ãã¾ããä¾ãã° car1.color = "black" ã¨ããæ§æã¯ãcolor ããããã£ã car1 ã«è¿½å ãã¦ãå¤ã¨ã㦠"black" ã代å
¥ãã¾ãã
ããããããã¯ãã以å¤ã®ãªãã¸ã§ã¯ãã«ã¯å½±é¿ãã¾ãããåãåã®ãã¹ã¦ã®ãªãã¸ã§ã¯ãã«æ°ããããããã£ã追å ããã«ã¯ãã³ã³ã¹ãã©ã¯ã¿ã¼ã® prototype ããããã£ã«ãã®ããããã£ã追å ããå¿
è¦ãããã¾ããããã«ããããã®ãªãã¸ã§ã¯ãã®åä¸ã®ã¤ã³ã¹ã¿ã³ã¹ã§ã¯ãªãããã®é¢æ°ã§çæããããã¹ã¦ã®ãªãã¸ã§ã¯ããå
±æããããããã£ãå®ç¾©ããã¾ããæ¬¡ã®ã³ã¼ãã¯ã Car åã®ãã¹ã¦ã®ãªãã¸ã§ã¯ãã« color ããããã£ã "original color" ã®å¤ã§è¿½å ãããã®ã§ããã®å¾ã«ã¤ã³ã¹ã¿ã³ã¹ãªãã¸ã§ã¯ã car1 ã§ã®ã¿ããã®å¤ãæåå "black" ã§ä¸æ¸ããã¾ãã詳細ã«ã¤ãã¦ã¯ããããã¿ã¤ããåç
§ãã¦ãã ããã
function Car() {}
const car1 = new Car();
const car2 = new Car();
console.log(car1.color); // undefined
Car.prototype.color = "original color";
console.log(car1.color); // 'original color'
car1.color = "black";
console.log(car1.color); // 'black'
console.log(Object.getPrototypeOf(car1).color); // 'original color'
console.log(Object.getPrototypeOf(car2).color); // 'original color'
console.log(car1.color); // 'black'
console.log(car2.color); // 'original color'
ã¡ã¢:
ã³ã³ã¹ãã©ã¯ã¿ã¼é¢æ°ã¯é常ã®é¢æ°ã¨åæ§ã«ï¼ã¤ã¾ã new æ¼ç®åãªãã§ï¼å¼ã³åºããã¨ãã§ãã¾ããããã®å ´åãæ°ãããªãã¸ã§ã¯ãã¯ä½æããããthis ã®å¤ãç°ãªãã¾ãã
颿°ã¯ã new ãã¤ãã¦å¼ã³åºããããã©ããã new.target ã§ç¢ºèªã§ãã¾ãã new.target ã undefined ã«ãªãã®ã¯ã颿°ã new ãªãã§å¼ã³åºãããå ´åã®ã¿ã§ããä¾ãã°ã颿°ãå¼ã³åºãããå ´åã¨ã³ã³ã¹ãã©ã¯ã¿ã¼ã¨ãã¦å¼ã³åºãããå ´åã§ç°ãªãåä½ãããããã«ã§ãã¾ãã
function Car(color) {
if (!new.target) {
// 颿°ã¨ãã¦å¼ã³åºããã
return `${color} car`;
}
// new ä»ãã§å¼ã³åºããã
this.color = color;
}
const a = Car("red"); // a 㯠"red car"
const b = new Car("red"); // b 㯠`Car { color: "red" }`
ES6ã§ã¯ã©ã¹ãå°å ¥ãããåã¯ãã»ã¨ãã©ã® JavaScript çµã¿è¾¼ã¿ãªãã¸ã§ã¯ãã¯å¼ã³åºãå¯è½ãã¤ã³ã³ã¹ãã©ã¯ã¿ã¼ã¨ãã¦ä½¿ç¨å¯è½ã§ãããããã®å¤ãã¯ç°ãªãæåã示ãã¦ãã¾ãããããã¤ãååãæãã¾ãã
Array(),Error(),Function()ã¯ã颿°ã¨ã³ã³ã¹ãã©ã¯ã¿ã¼ã®ã©ã¡ãã¨ãã¦å¼ã³åºããã¦ãåãåä½ããã¾ããBoolean(),Number(),String()ã¯ã颿°ã¨ãã¦å¼ã³åºãããå ´åã¯å¼æ°ã対å¿ããããªããã£ãã«å夿ããã³ã³ã¹ãã©ã¯ã¿ã¼ã¨ãã¦å¼ã³åºãããå ´åã¯ã©ããã¼ãªãã¸ã§ã¯ããè¿ãã¾ããDate()ã¯ãå¼ã³åºãããæç¹ã§ã®ç¾å¨ã®æ¥ä»ã表ãæååãè¿ãã¾ããããã¯new Date().toString()ã¨åçã§ãã
ES6 以éãè¨èªã¯ã³ã³ã¹ãã©ã¯ã¿ã¼ã¨é¢æ°ã®åºå¥ããã峿 ¼ã«æ±ãã¾ããä¾ãã°ã
Symbol()ã¨BigInt()ã¯newãªãã§ã®ã¿å¼ã³åºããã¨ãã§ãã¾ããã³ã³ã¹ãã©ã¯ã¿ã¼ã¨ãã¦å¼ã³åºããã¨ããã¨TypeErrorãçºçãã¾ããProxyã¨Mapã¯newä»ãã§ã®ã¿æ§ç¯ã§ãã¾ãã颿°ã¨ãã¦å¼ã³åºããã¨ããã¨TypeErrorãçºçãã¾ãã
ä¾
>ãªãã¸ã§ã¯ãã®åã¨ãªãã¸ã§ã¯ãã®ã¤ã³ã¹ã¿ã³ã¹
èªåè»ç¨ã®ãªãã¸ã§ã¯ãåã使ãããã¨ãã¾ãããã®ãªãã¸ã§ã¯ãå㯠Car ã¨ããååã§ãmakeãmodelãyear ã¨ããããããã£ãæããã¾ãããã®ããã«ã以ä¸ã®é¢æ°ãè¨è¿°ãã¾ãã
function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
ããã§ã以ä¸ã®ããã«ã㦠myCar ã¨ããååã®ãªãã¸ã§ã¯ããçæã§ãã¾ãã
const myCar = new Car("Eagle", "Talon TSi", 1993);
ãã®æ§æã¯ myCar ãçæãã¦ãããããã£ã«ç¹å®ã®å¤ã代å
¥ãã¦ãã¾ããmyCar.make ã®å¤ã¯æåå "Eagle"ãmyCar.year ã®å¤ã¯æ´æ° 1993 ãªã©ã¨ãªãã¾ãã
new ãå¼ã³åºãã¦ãcar ãªãã¸ã§ã¯ããããã¤ãçæã§ãã¾ããä¾ãã°ã
const kensCar = new Car("Nissan", "300ZX", 1992);
ããèªèº«ãå¥ã®ãªãã¸ã§ã¯ãã§ãããªãã¸ã§ã¯ãããããã£
以ä¸ã®ããã«ãPerson ã¨ããååã®ãªãã¸ã§ã¯ããå®ç¾©ãã¾ãã
function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
ããã¦ã以ä¸ã®ããã« Person ãªãã¸ã§ã¯ãã®ã¤ã³ã¹ã¿ã³ã¹ãæ°ãã« 2 ã¤çæãã¾ãã
const rand = new Person("Rand McNally", 33, "M");
const ken = new Person("Ken Jones", 39, "M");
ããã« Car ã®å®ç¾©ãã以ä¸ã®ããã« Person ãªãã¸ã§ã¯ããå¤ã¨ãã¦ã¨ã owner ããããã£ãæã¤ããã«æ¸ãæãã¾ã:
function Car(make, model, year, owner) {
this.make = make;
this.model = model;
this.year = year;
this.owner = owner;
}
æ°ãããªãã¸ã§ã¯ããçæããããã以ä¸ã®ããã«ä½¿ç¨ãã¾ãã
const car1 = new Car("Eagle", "Talon TSi", 1993, rand);
const car2 = new Car("Nissan", "300ZX", 1992, ken);
ãã®æ§æã§ã¯æ°ãããªãã¸ã§ã¯ããçæããã¨ãã«æååãæ´æ°ã®ãªãã©ã«å¤ã渡ã代ããã«ãowner ã®å¼æ°ã¨ãã¦ãªãã¸ã§ã¯ã rand ã ken ãæ¸¡ãã¦ãã¾ããcar2 ã®ææè
åã調ã¹ãã«ã¯ã以ä¸ã®ããã«ãã¦ããããã£ã«ã¢ã¯ã»ã¹ã§ãã¾ãã
car2.owner.name;
new ãã¯ã©ã¹ã§ä½¿ç¨
class Person {
constructor(name) {
this.name = name;
}
greet() {
console.log(`Hello, my name is ${this.name}`);
}
}
const p = new Person("Caroline");
p.greet(); // Hello, my name is Caroline
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-new-operator> |