Baseline Widely available
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);
// Expected output: "Eagle"
è¯æ³
new constructor
new constructor()
new constructor(arg1)
new constructor(arg1, arg2)
new constructor(arg1, arg2, /* â¦, */ argN)
åæ°
constructor
ä¸ä¸ªæå®å¯¹è±¡å®ä¾çç±»åçç±»æå½æ°ã
arg1
ãarg2
ãâ¦â¦ãargN
ä¸ä¸ªç¨äºè¢« constructor
è°ç¨çå¼å表ãnew Foo
ä¸ new Foo()
çä»·ï¼æ¢å¥è¯è¯´ï¼å¦ææ²¡ææå®åæ°å表ï¼åå¨ä¸å¸¦åæ°çæ
åµä¸è°ç¨ Foo
ã
å½ä½¿ç¨ new
å
³é®åè°ç¨å½æ°æ¶ï¼è¯¥å½æ°å°è¢«ç¨ä½æé 彿°ãnew
å°æ§è¡ä»¥ä¸æä½ï¼
å建ä¸ä¸ªç©ºçç®å JavaScript 对象ã为æ¹ä¾¿èµ·è§ï¼æä»¬ç§°ä¹ä¸º newInstance
ã
妿æé 彿°ç prototype
屿§æ¯ä¸ä¸ªå¯¹è±¡ï¼åå° newInstance
ç [[Prototype]] æåæé 彿°ç prototype
屿§ï¼å¦å newInstance
å°ä¿æä¸ºä¸ä¸ªæ®é对象ï¼å
¶ [[Prototype]] 为 Object.prototype
ã
夿³¨ï¼ å æ¤ï¼éè¿æé 彿°åå»ºçææå®ä¾é½å¯ä»¥è®¿é®æ·»å å°æé 彿° prototype
屿§ä¸ç屿§/对象ã
使ç¨ç»å®åæ°æ§è¡æé 彿°ï¼å¹¶å° newInstance
ç»å®ä¸º this
çä¸ä¸æï¼æ¢å¥è¯è¯´ï¼å¨æé 彿°ä¸çææ this
å¼ç¨é½æå newInstance
ï¼ã
妿æé 彿°è¿åéåå§å¼ï¼å该è¿åå¼æä¸ºæ´ä¸ª new
表达å¼çç»æãå¦åï¼å¦ææé 彿°æªè¿åä»»ä½å¼æè¿åäºä¸ä¸ªåå§å¼ï¼åè¿å newInstance
ãï¼é常æé 彿°ä¸è¿åå¼ï¼ä½å¯ä»¥éæ©è¿åå¼ï¼ä»¥è¦çæ£å¸¸ç对象å建è¿ç¨ãï¼
ç±»åªè½ç¨ new
è¿ç®ç¬¦å®ä¾åââå°è¯ä¸ä½¿ç¨ new
è°ç¨ä¸ä¸ªç±»å°æåº TypeError
ã
å建ä¸ä¸ªç¨æ·èªå®ä¹ç对象éè¦ä¸¤æ¥ï¼
éè¿ç¼åæå®å¯¹è±¡åç§°å屿§ç彿°æ¥å®ä¹å¯¹è±¡ç±»åãä¾å¦ï¼å建 Foo
对象çæé 彿°çèµ·æ¥å¯è½åè¿æ ·ï¼
function Foo(bar1, bar2) {
this.bar1 = bar1;
this.bar2 = bar2;
}
éè¿ new
æ¥å建对象å®ä¾ã
const myFoo = new Foo("Bar 1", 2021);
夿³¨ï¼ 对象ç屿§å¯ä»¥æ¯å¦ä¸ä¸ªå¯¹è±¡ã请åé ä¸é¢ç示ä¾ã
ä½ å§ç»å¯ä»¥å¯¹å·²å®ä¹çå¯¹è±¡æ·»å æ°ç屿§ãä¾å¦ï¼car1.color = "black"
è¯å¥ç» car1
æ·»å äºä¸ä¸ªæ°ç屿§ color
ï¼å¹¶å°å
¶èµå¼ä¸º "black"
ã
使¯ï¼è¿ä¸ä¼å½±åä»»ä½å
¶ä»å¯¹è±¡ãè¦å°æ°å±æ§æ·»å å°ç¸åç±»åçææå¯¹è±¡ï¼ä½ å¿
é¡»å°è¯¥å±æ§æ·»å å°æé 彿°ç prototype
屿§ä¸ãå
¶å®ä¹äºç±è¯¥å½æ°åå»ºçææå¯¹è±¡æå
±äº«ç屿§ï¼èä¸ä»
ä»
æ¯å¯¹è±¡ç±»åçå
¶ä¸ä¸ä¸ªå®ä¾ã以ä¸ä»£ç å°ä¸ä¸ªå¼ä¸º "åè²"
ç color
屿§æ·»å å° Car
ç±»åçææå¯¹è±¡ï¼ç¶åä»
å¨å®ä¾å¯¹è±¡ car1
ä¸ç¨å符串 "é»è²"
è¦ç该å¼ã请åè§åå以äºè§£æ´å¤ä¿¡æ¯ã
function Car() {}
car1 = new Car();
car2 = new Car();
console.log(car1.color); // undefined
Car.prototype.color = "åè²";
console.log(car1.color); // 'åè²'
car1.color = "é»è²";
console.log(car1.color); // 'é»è²'
console.log(Object.getPrototypeOf(car1).color); // 'åè²'
console.log(Object.getPrototypeOf(car2).color); // 'åè²'
console.log(car1.color); // 'é»è²'
console.log(car2.color); // 'åè²'
夿³¨ï¼ è½ç¶æé 彿°å¯ä»¥åä»»ä½å¸¸è§å½æ°ä¸æ ·è¢«è°ç¨ï¼å³ä¸ä½¿ç¨ new
è¿ç®ç¬¦ï¼ï¼ä½å¨è¿ç§æ
åµä¸å¹¶ä¸ä¼å建ä¸ä¸ªæ°ç对象ï¼this
çå¼ä¹æ¯ä¸ä¸æ ·çã
彿°å¯ä»¥éè¿æ£æ¥ new.target
æ¥ç¥é宿¯å¦æ¯éè¿ new
被è°ç¨çãå½å½æ°å¨æ²¡æä½¿ç¨ new
çæ
åµä¸è¢«è°ç¨æ¶ï¼new.target
çå¼ä¸º undefined
ãä¾å¦ï¼ä½ å¯ä»¥æä¸ä¸ªå¨è¢«è°ç¨æ¶å被æé æ¶å
·æä¸å表ç°ç彿°ï¼
function Car(color) {
if (!new.target) {
// 以彿°çå½¢å¼è¢«è°ç¨ã
return `${color}车`;
}
// éè¿ new 被è°ç¨ã
this.color = color;
}
const a = Car("红"); // a æ¯â红车â
const b = new Car("红"); // b æ¯ `Car { color: "红" }`
å¨ 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("é¹°ç", "Talon TSi", 1993);
该è¯å¥åå»ºäº myCar
å¹¶å°å
¶å±æ§èµä¸ºæå®çå¼ãäºæ¯ myCar.make
çå¼âé¹°çâï¼myCar.year
çå¼ä¸ºæ´æ° 1993ï¼ä»¥æ¤ç±»æ¨ã
ä½ å¯ä»¥éè¿è°ç¨ new
æ¥å建任æä¸ª car
对象ãä¾å¦ï¼
const kensCar = new Car("å°¼æ¡", "300ZX", 1992);
å¯¹è±¡å±æ§ä¸ºå
¶ä»å¯¹è±¡
åè®¾ä½ å®ä¹äºä¸ä¸ªå«å Person
ç对象ï¼
function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
ç¶åå®ä¾åäºä¸¤ä¸ªæ°ç Person
对象å¦ä¸ï¼
const rand = new Person("å
°å¾·Â·éº¦å
纳å©", 33, "ç·æ§");
const ken = new Person("è¯Â·ç¼æ¯", 39, "ç·æ§");
ç¶åä½ å¯ä»¥éå 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("é¹°ç", "Talon TSi", 1993, rand);
const car2 = new Car("å°¼æ¡", "300ZX", 1992, ken);
å建对象æ¶ï¼å¹¶æ²¡æä¼ åç¬¦ä¸²ææ°åï¼èæ¯å°å¯¹è±¡ rand
å ken
ä½ä¸ºåæ°ä¼ éï¼æ¥ä»£è¡¨ææè
ãè¦æ¥æ¾ car2
çææè
çåç§°ï¼ä½ å¯ä»¥è®¿é®ä»¥ä¸å±æ§ï¼
new
åç±»
class Person {
constructor(name) {
this.name = name;
}
greet() {
console.log(`ä½ å¥½ï¼æçå忝${this.name}`);
}
}
const p = new Person("å¡ç½ç³");
p.greet(); // ä½ å¥½ï¼æçå忝å¡ç½ç³
è§è æµè§å¨å
¼å®¹æ§ åè§
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