Object
åºçº¿
广æ³å¯ç¨
*
èª 2015å¹´7æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
* æ¤ç¹æ§çæäºé¨åçæ¯æç¨åº¦å¯è½ææä¸åã
Object æ¯ JavaScript çä¸ç§æ°æ®ç±»åãå®ç¨äºåå¨åç§é®å¼éå忴夿çå®ä½ãå¯ä»¥éè¿ Object() æé 彿°æè
使ç¨å¯¹è±¡åé¢éçæ¹å¼å建对象ã
æè¿°
å¨ JavaScript ä¸ï¼å 乿æçå¯¹è±¡é½æ¯ Object çå®ä¾ï¼ä¸ä¸ªå
¸åçå¯¹è±¡ä» Object.prototype ç»§æ¿å±æ§ï¼å
æ¬æ¹æ³ï¼ï¼å°½ç®¡è¿äºå±æ§å¯è½è¢«è¦çï¼æè
说éåï¼ãå¯ä¸ä¸ä» Object.prototype ç»§æ¿ç对象æ¯é£äº null ååå¯¹è±¡ï¼æè
æ¯ä»å
¶ä» null åå对象继æ¿èæ¥ç对象ã
éè¿ååé¾ï¼ææå¯¹è±¡é½è½è§å¯å° Object.prototype å¯¹è±¡çæ¹åï¼é¤éè¿äºæ¹åææ¶åç屿§åæ¹æ³æ²¿çååé¾è¢«è¿ä¸æ¥éåãå°½ç®¡ææ½å¨çå±é©ï¼ä½è¿ä¸ºè¦çææ©å±å¯¹è±¡çè¡ä¸ºæä¾äºä¸ä¸ªéå¸¸å¼ºå¤§çæºå¶ã为äºä½¿å
¶æ´å å®å
¨ï¼Object.prototype æ¯æ ¸å¿ JavaScript è¯è¨ä¸å¯ä¸å
·æä¸å¯åååç对象ââObject.prototype çååå§ç»ä¸º null ä¸ä¸å¯æ´æ¹ã
对象åå屿§
ä½ åºè¯¥é¿å
è°ç¨ä»»ä½ Object.prototype æ¹æ³ï¼ç¹å«æ¯é£äºä¸æç®å¤æåçæ¹æ³ï¼å³åªæå
¶åå§è¡ä¸ºæ¯åççï¼ä¸æ æ³è¢«ä»»ä½ç»§æ¿ç对象以åççæ¹å¼éåï¼ãææä» Object.prototype ç»§æ¿ç对象é½å¯ä»¥èªå®ä¹ä¸ä¸ªå
·æç¸ååç§°ä½è¯ä¹å¯è½ä¸ä½ ç颿å®å
¨ä¸åçèªæå±æ§ãæ¤å¤ï¼è¿äºå±æ§ä¸ä¼è¢« null åå对象继æ¿ãç°ä»£ JavaScript ä¸ç¨äºæä½å¯¹è±¡çå·¥å
·æ¹æ³é½æ¯éæçãæ´å
·ä½å°è¯´ï¼
valueOf()ãtoString()åtoLocaleString()åå¨çç®çæ¯ä¸ºäºå¤æåï¼ä½ åºè¯¥ææå¯¹è±¡ä¼å®ä¹èªå·±çå®ç°å¹¶å ·æåççè¡ä¸ºï¼å æ¤ä½ å¯ä»¥å°å®ä»¬ä½ä¸ºå®ä¾æ¹æ³è°ç¨ã使¯ï¼valueOf()åtoString()é常æ¯éè¿å¼ºå¶ç±»å转æ¢éå¼è°ç¨çï¼å æ¤ä½ ä¸éè¦å¨ä»£ç ä¸èªå·±è°ç¨å®ä»¬ã__defineGetter__()ã__defineSetter__()ã__lookupGetter__()å__lookupSetter__()已被å¼ç¨ï¼ä¸åºè¯¥å使ç¨ã请使ç¨éææ¹æ³Object.defineProperty()åObject.getOwnPropertyDescriptor()ä½ä¸ºæ¿ä»£ã__proto__屿§å·²è¢«å¼ç¨ï¼ä¸åºè¯¥å使ç¨ã请使ç¨éææ¹æ³Object.getPrototypeOf()åObject.setPrototypeOf()ä½ä¸ºæ¿ä»£ãpropertyIsEnumerable()åhasOwnProperty()æ¹æ³å¯ä»¥åå«ç¨éææ¹æ³Object.getOwnPropertyDescriptor()åObject.hasOwn()æ¿æ¢ã- å¦æä½ æ£å¨æ£æ¥ä¸ä¸ªæé 彿°ç
prototype屿§ï¼é常å¯ä»¥ç¨instanceof代æ¿isPrototypeOf()æ¹æ³ã
妿ä¸åå¨è¯ä¹ä¸çä»·çéææ¹æ³ï¼æè
ä½ ççæ³ä½¿ç¨ Object.prototype æ¹æ³ï¼ä½ åºè¯¥éè¿ call() ç´æ¥å¨ç®æ 对象ä¸è°ç¨ Object.prototype æ¹æ³ï¼ä»¥é²æ¢å ç®æ 对象ä¸åææ¹æ³è¢«éåè产çæå¤çç»æã
const obj = {
foo: 1,
// 妿å¯è½çè¯ï¼ä½ ä¸åºè¯¥å¨èªå·±ç对象ä¸å®ä¹è¿æ ·çæ¹æ³ï¼
// 使¯å¦æä½ ä»å¤é¨è¾å
¥æ¥æ¶å¯¹è±¡ï¼å¯è½æ æ³é²æ¢è¿ç§æ
åµçåç
propertyIsEnumerable() {
return false;
},
};
obj.propertyIsEnumerable("foo"); // falseï¼é¢æå¤çç»æ
Object.prototype.propertyIsEnumerable.call(obj, "foo"); // trueï¼é¢æçç»æ
ä»å¯¹è±¡ä¸å é¤å±æ§
ä¸ä¸ªå¯¹è±¡æ¬èº«æ²¡æä»»ä½æ¹æ³å¯ä»¥ï¼å Map.prototype.delete() 䏿 ·ï¼å é¤èªå·±ç屿§ãè¦å é¤ä¸ä¸ªå¯¹è±¡ç屿§ï¼å¿
é¡»ä½¿ç¨ delete è¿ç®ç¬¦ã
null åå对象
å 乿æç JavaScript 对象æç»é½ç»§æ¿èª Object.prototypeï¼åè§ç»§æ¿ä¸ååé¾ï¼ãç¶èï¼ä½ å¯ä»¥ä½¿ç¨ Object.create(null) æå®ä¹äº __proto__: null ç对象åé¢éè¯æ³ï¼æ³¨æï¼å¯¹è±¡åé¢éä¸ç __proto__ é®ä¸åäºå·²å¼ç¨ç Object.prototype.__proto__ 屿§ï¼æ¥å建 null åå对象ãä½ è¿å¯ä»¥éè¿è°ç¨ Object.setPrototypeOf(obj, null) å°ç°æå¯¹è±¡çååæ´æ¹ä¸º nullã
const obj = Object.create(null);
const obj2 = { __proto__: null };
null åå对象å¯è½ä¼æä¸äºé¢æå¤çè¡ä¸ºè¡¨ç°ï¼å 为å®ä¸ä¼ä» Object.prototype ç»§æ¿ä»»ä½å¯¹è±¡æ¹æ³ãè¿å¨è°è¯æ¶å°¤å
¶éè¦æ³¨æï¼å 为常è§çå¯¹è±¡å±æ§è½¬æ¢/æ£æµå®ç¨æ¹æ³å¯è½ä¼äº§çé误æä¸¢å¤±ä¿¡æ¯ï¼ç¹å«æ¯å¨ä½¿ç¨äºå¿½ç¥é误çéé»é误æè·æºå¶çæ
åµä¸ï¼ã
ä¾å¦ï¼Object.prototype.toString() æ¹æ³ç缺失é常ä¼ä½¿å¾è°è¯åå¾å°é¾ï¼
const normalObj = {}; // å建ä¸ä¸ªæ®é对象
const nullProtoObj = Object.create(null); // å建ä¸ä¸ª "null" åå对象
console.log(`normalObj æ¯ï¼${normalObj}`); // æ¾ç¤º "normalObj æ¯ï¼[object Object]"
console.log(`nullProtoObj æ¯ï¼${nullProtoObj}`); // æåºé误ï¼Cannot convert object to primitive value
alert(normalObj); // æ¾ç¤º [object Object]
alert(nullProtoObj); // æåºé误ï¼Cannot convert object to primitive value
å ¶ä»æ¹æ³ä¹ä¼å¤±è´¥ã
normalObj.valueOf(); // æ¾ç¤º {}
nullProtoObj.valueOf(); // æåºé误ï¼nullProtoObj.valueOf is not a function
normalObj.hasOwnProperty("p"); // æ¾ç¤º "true"
nullProtoObj.hasOwnProperty("p"); // æåºé误ï¼nullProtoObj.hasOwnProperty is not a function
normalObj.constructor; // æ¾ç¤º "Object() { [native code] }"
nullProtoObj.constructor; // æ¾ç¤º "undefined"
æä»¬å¯ä»¥éè¿ä¸º null åå对象åé
屿§çæ¹å¼å° toString æ¹æ³æ·»å åå»ï¼
nullProtoObj.toString = Object.prototype.toString; // ç±äºæ°å¯¹è±¡ç¼ºå° `toString` æ¹æ³ï¼å æ¤éè¦å°åå§çéç¨ `toString` æ¹æ³æ·»å 忥ã
console.log(nullProtoObj.toString()); // æ¾ç¤º "[object Object]"
console.log(`nullProtoObj æ¯ï¼${nullProtoObj}`); // æ¾ç¤º "nullProtoObj æ¯ï¼[object Object]"
æ®é对象ç toString() æ¹æ³æ¯å¨å¯¹è±¡çååä¸çï¼è䏿®é对象ä¸åçæ¯ï¼è¿éç toString() æ¹æ³æ¯ nullProtoObj çèªæå±æ§ãè¿æ¯å 为 nullProtoObj 没æååï¼å³ä¸º nullï¼ã
å¨å®è·µä¸ï¼null åå对象é常被ç¨ä½ map çç®åæ¿ä»£åãç±äºåå¨ Object.prototype 屿§ï¼ä¼å¯¼è´ä¸äºé误ï¼
const ages = { alice: 18, bob: 27 };
function hasPerson(name) {
return name in ages;
}
function getAge(name) {
return ages[name];
}
hasPerson("hasOwnProperty"); // true
getAge("toString"); // [Function: toString]
使ç¨ä¸ä¸ª null åå对象å¯ä»¥æ¶é¤è¿ç§é£é©ï¼åæ¶ä¸ä¼ä»¤ hasPerson å getAge 彿°åå¾å¤æï¼
const ages = Object.create(null, {
alice: { value: 18, enumerable: true },
bob: { value: 27, enumerable: true },
});
hasPerson("hasOwnProperty"); // false
getAge("toString"); // undefined
å¨è¿ç§æ åµä¸ï¼æ·»å 任使¹æ³é½åºè¯¥æ éï¼å 为å®ä»¬å¯è½ä¼ä¸åå¨ä¸ºæ°æ®çå ¶ä»é®å¼å¯¹æ··æ·ã
è®©ä½ ç对象ä¸ç»§æ¿èª Object.prototype è¿å¯ä»¥é²æ¢ååæ±¡ææ»å»ãå¦ææ¶æèæ¬å Object.prototype æ·»å ä¸ä¸ªå±æ§ï¼ç¨åºä¸çæ¯ä¸ªå¯¹è±¡ä¸é½å¯è®¿é®å®ï¼é¤äºé£äºåå为 null ç对象ã
const user = {};
// æ¶æèæ¬ï¼
Object.prototype.authenticated = true;
// æå¤å
许æªç»èº«ä»½éªè¯çç¨æ·éè¿
if (user.authenticated) {
// è®¿é®æºå¯æ°æ®
}
JavaScript è¿å
·æå
ç½®ç APIï¼ç¨äºçæ null åå对象ï¼ç¹å«æ¯é£äºå°å¯¹è±¡ç¨ä½ä¸´æ¶é®å¼å¯¹éåç APIãä¾å¦ï¼
Object.groupBy()æ¹æ³çè¿åå¼RegExp.prototype.exec()æ¹æ³è¿åç»æä¸çgroupsåindices.groups屿§Array.prototype[Symbol.unscopables]屿§ï¼ææ[Symbol.unscopables]对象ååé½åºè¯¥ä¸ºnullï¼import.meta对象- éè¿
import * as ns from "module"æimport()è·åçæ¨¡åå½å空é´å¯¹è±¡
ânull åå对象âè¿ä¸ªæ¯è¯é常ä¹å
æ¬å
¶ååé¾ä¸æ²¡æ Object.prototype çä»»ä½å¯¹è±¡ãå½ä½¿ç¨ç±»æ¶ï¼å¯ä»¥éè¿ extends null æ¥åå»ºè¿æ ·ç对象ã
对象强å¶è½¬æ¢
许å¤å ç½®æä½é¦å å°å®ä»¬çåæ°å¼ºå¶è½¬æ¢ä¸ºå¯¹è±¡ã该è¿ç¨å¯ä»¥æ¦æ¬å¦ä¸ï¼
- 对象åæåæ ·è¿åã
undefinedånullåæåºTypeErrorãNumberãStringãBooleanãSymbolãBigIntçåºæ¬ç±»å被å°è£ æå ¶å¯¹åºçåºæ¬ç±»å对象ã
å¨ JavaScript ä¸å®ç°ç¸åææçæä½³æ¹å¼æ¯ä½¿ç¨ Object() æé 彿°ãObject(x) å¯ä»¥å° x 转æ¢ä¸ºå¯¹è±¡ï¼å¯¹äº undefined æ nullï¼å®ä¼è¿åä¸ä¸ªæ®é对象è䏿¯æåº TypeError å¼å¸¸ã
使ç¨å¯¹è±¡å¼ºå¶è½¬æ¢çå°æ¹å æ¬ï¼
for...in循ç¯çobjectåæ°ãArrayæ¹æ³çthiså¼ãObjectæ¹æ³çåæ°ï¼å¦Object.keys()ã- å½è®¿é®åºæ¬ç±»åç屿§æ¶è¿è¡èªå¨è½¬æ¢ï¼å ä¸ºåºæ¬ç±»å没æå±æ§ã
- å¨è°ç¨éä¸¥æ ¼å½æ°æ¶ç
thiså¼ãåºæ¬ç±»åå¼è¢«å°è£ 为对象ï¼ènullåundefinedè¢«æ¿æ¢ä¸ºå ¨å±å¯¹è±¡ã
ä¸è½¬æ¢ä¸ºåºæ¬ç±»åä¸åï¼å¯¹è±¡å¼ºå¶è½¬æ¢è¿ç¨æ¬èº«æ æ³ä»¥ä»»ä½æ¹å¼è¢«è§å¯å°ï¼å 为å®ä¸ä¼è°ç¨å toString æ valueOf æ¹æ³è¿æ ·çèªå®ä¹ä»£ç ã
æé 彿°
Object()-
å°è¾å ¥è½¬æ¢ä¸ºä¸ä¸ªå¯¹è±¡ã
éææ¹æ³
Object.assign()-
å°ä¸ä¸ªæå¤ä¸ªæºå¯¹è±¡çææå¯æä¸¾èªæå±æ§çå¼å¤å¶å°ç®æ 对象ä¸ã
Object.create()-
ä½¿ç¨æå®çåå对象å屿§å建ä¸ä¸ªæ°å¯¹è±¡ã
Object.defineProperties()-
å对象添å å¤ä¸ªç±ç»å®æè¿°ç¬¦æè¿°çå½å屿§ã
Object.defineProperty()-
å对象添å ä¸ä¸ªç±ç»å®æè¿°ç¬¦æè¿°çå½å屿§ã
Object.entries()-
è¿åå å«ç»å®å¯¹è±¡èªæå¯æä¸¾åç¬¦ä¸²å±æ§çææ
[key, value]æ°ç»ã Object.freeze()-
å»ç»ä¸ä¸ªå¯¹è±¡ãå ¶ä»ä»£ç ä¸è½å é¤ææ´æ¹å ¶ä»»ä½å±æ§ã
Object.fromEntries()-
ä»ä¸ä¸ªå å«
[key, value]对çå¯è¿ä»£å¯¹è±¡ä¸è¿åä¸ä¸ªæ°ç对象ï¼Object.entriesçåæä½ï¼ã Object.getOwnPropertyDescriptor()-
è¿åä¸ä¸ªå¯¹è±¡çå·²å½å屿§ç屿§æè¿°ç¬¦ã
Object.getOwnPropertyDescriptors()-
è¿åä¸ä¸ªå å«å¯¹è±¡ææèªæå±æ§ç屿§æè¿°ç¬¦ç对象ã
Object.getOwnPropertyNames()-
è¿åä¸ä¸ªå å«ç»å®å¯¹è±¡çææèªæå¯æä¸¾åä¸å¯æä¸¾å±æ§åç§°çæ°ç»ã
Object.getOwnPropertySymbols()-
è¿åä¸ä¸ªæ°ç»ï¼å®å å«äºæå®å¯¹è±¡ææèªæ symbol 屿§ã
Object.getPrototypeOf()-
è¿åæå®å¯¹è±¡çååï¼å é¨ç
[[Prototype]]屿§ï¼ã Object.hasOwn()-
妿æå®å±æ§æ¯æå®å¯¹è±¡çèªæå±æ§ï¼åè¿å
trueï¼å¦åè¿åfalseãå¦æè¯¥å±æ§æ¯ç»§æ¿çæä¸åå¨ï¼åè¿åfalseã Object.is()-
æ¯è¾ä¸¤ä¸ªå¼æ¯å¦ç¸åãææ
NaNå¼é½ç¸çï¼è¿ä¸==使ç¨çIsLooselyEqualå===使ç¨çIsStrictlyEqualä¸åï¼ã Object.isExtensible()-
å¤æå¯¹è±¡æ¯å¦å¯æ©å±ã
Object.isFrozen()-
å¤æå¯¹è±¡æ¯å¦å·²ç»å»ç»ã
Object.isSealed()-
å¤æå¯¹è±¡æ¯å¦å·²ç»å°éã
Object.keys()-
è¿åä¸ä¸ªå 嫿æç»å®å¯¹è±¡èªæå¯æä¸¾åç¬¦ä¸²å±æ§åç§°çæ°ç»ã
Object.preventExtensions()-
鲿¢å¯¹è±¡ç任使©å±ã
Object.seal()-
鲿¢å ¶ä»ä»£ç å é¤å¯¹è±¡ç屿§ã
Object.setPrototypeOf()-
设置对象çååï¼å³å é¨
[[Prototype]]屿§ï¼ã Object.values()-
è¿åå å«ç»å®å¯¹è±¡ææèªæå¯æä¸¾åç¬¦ä¸²å±æ§çå¼çæ°ç»ã
å®ä¾å±æ§
è¿äºå±æ§å¨ Object.prototype ä¸å®ä¹ï¼è¢«ææ Object å®ä¾æå
±äº«ã
Object.prototype.__proto__-
æåå®ä¾å¯¹è±¡å¨å®ä¾åæ¶ä½¿ç¨çåå对象ã
Object.prototype.constructor-
å建该å®ä¾å¯¹è±¡çæé 彿°ãå¯¹äºæ®éç
Objectå®ä¾ï¼åå§å¼ä¸ºObjectæé 彿°ãå ¶å®æé 彿°çå®ä¾é½ä¼ä»å®ä»¬åèªçConstructor.prototype对象ä¸ç»§æ¿constructor屿§ã
å®ä¾æ¹æ³
Object.prototype.__defineGetter__()-
å°ä¸ä¸ªå±æ§ä¸ä¸ä¸ªå½æ°ç¸å ³èï¼å½è¯¥å±æ§è¢«è®¿é®æ¶ï¼æ§è¡è¯¥å½æ°ï¼å¹¶ä¸è¿å彿°çè¿åå¼ã
Object.prototype.__defineSetter__()-
å°ä¸ä¸ªå±æ§ä¸ä¸ä¸ªå½æ°ç¸å ³èï¼å½è¯¥å±æ§è¢«è®¾ç½®æ¶ï¼æ§è¡è¯¥å½æ°ï¼æ§è¡è¯¥å½æ°å»ä¿®æ¹æä¸ªå±æ§ã
Object.prototype.__lookupGetter__()-
è¿åç»å®å¨æå®å±æ§ä¸ç getter 彿°ã
Object.prototype.__lookupSetter__()-
è¿åç»å®å¨æå®å±æ§ä¸ç setter 彿°ã
Object.prototype.hasOwnProperty()-
è¿åä¸ä¸ªå¸å°å¼ï¼ç¨äºè¡¨ç¤ºä¸ä¸ªå¯¹è±¡èªèº«æ¯å¦å 嫿å®ç屿§ï¼è¯¥æ¹æ³å¹¶ä¸ä¼æ¥æ¾ååé¾ä¸ç»§æ¿æ¥ç屿§ã
Object.prototype.isPrototypeOf()-
è¿åä¸ä¸ªå¸å°å¼ï¼ç¨äºè¡¨ç¤ºè¯¥æ¹æ³æè°ç¨ç对象æ¯å¦å¨æå®å¯¹è±¡çååé¾ä¸ã
Object.prototype.propertyIsEnumerable()-
è¿åä¸ä¸ªå¸å°å¼ï¼æç¤ºæå®å±æ§æ¯å¦æ¯å¯¹è±¡çå¯æä¸¾èªæå±æ§ã
Object.prototype.toLocaleString()-
è°ç¨
toString()æ¹æ³ã Object.prototype.toString()-
è¿åä¸ä¸ªä»£è¡¨è¯¥å¯¹è±¡çå符串ã
Object.prototype.valueOf()-
è¿åæå®å¯¹è±¡çåºæ¬ç±»åå¼ã
示ä¾
>æé 空对象
以ä¸ç¤ºä¾ä½¿ç¨å¸¦æä¸ååæ°ç new å
³é®åå建空对象ï¼
const o1 = new Object();
const o2 = new Object(undefined);
const o3 = new Object(null);
ä½¿ç¨ Object çæå¸å°å¯¹è±¡
ä¸é¢çä¾åå° Boolean 对象åå° o ä¸ï¼
// çä»·äº const o = new Boolean(true);
const o = new Object(true);
// çä»·äº const o = new Boolean(false);
const o = new Object(Boolean());
Object prototype
彿们è¦ä¿®æ¹ç°æç Object.prototype æ¹æ³æ¶ï¼è¯·ä½ èèä¸ä¸å¨ç°æé»è¾ä¹åæè
ä¹åéè¿å
è£
æ©å±ä»£ç çæ¹å¼æ¥æ³¨å
¥ä»£ç ãä¾å¦ï¼ä»¥ä¸ï¼æªç»æµè¯çï¼ä»£ç å°ä¼å¨æ§è¡å
é¨é»è¾æè
æ¯å
¶ä»æ©å±ä¹åï¼ææ¡ä»¶å°æ§è¡ä¸æ®µèªå®ä¹çé»è¾ã
å¨ä½¿ç¨é©åä¿®æ¹ååæ¶ï¼éè¿å¨å½æ°ä¸è°ç¨ apply() æ¹æ³å¹¶ä¼ é this ååæ°ï¼å³è°ç¨ç¶æï¼ï¼å°å
¶ä¼ éç»å½åè¡ä¸ºãè¿ç§æ¨¡å¼å¯ä»¥ç¨äºä»»ä½ååï¼ä¾å¦ Node.prototypeãFunction.prototype çã
const current = Object.prototype.valueOf;
// ç±äºæç屿§â-prop-valueâæ¯æ¨ªè·¨å¤ä¸ªååé¾çï¼å¹¶ä¸ä¸æ»æ¯å¨åä¸ä¸ªååé¾ä¸ï¼
// å æ¤ææ³ä¿®æ¹ Object.prototypeï¼
Object.prototype.valueOf = function (...args) {
if (Object.hasOwn(this, "-prop-value")) {
return this["-prop-value"];
} else {
// è¿ä¼¼ä¹ä¸æ¯æç对象ï¼å æ¤è®©æä»¬å°½å¯è½å®ç°é»è®¤è¡ä¸ºã
// 卿äºå
¶ä»è¯è¨ä¸ï¼apply çè¡ä¸ºç±»ä¼¼äº "super"ã
// å³ä½¿ valueOf() ä¸éè¦åæ°ï¼ä½å
¶ä»çæ¹æ³å¯è½éè¦åæ°ã
return current.apply(this, args);
}
};
è¦åï¼ä¿®æ¹ä»»ä½å
ç½®æé 彿°ç prototype 屿§è¢«è®¤ä¸ºæ¯ä¸ç§ä¸å¥½çåæ³ï¼å¯è½ä¼å½±åååå
¼å®¹æ§ã
ä½ å¯ä»¥é 读æ´å¤å ³äºååçå 容ï¼åè§ç»§æ¿ä¸ååé¾ã
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-object-objects> |