Object.preventExtensions()
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æ.
Object.preventExtensions() ç¨ä¾é¿å
ç©ä»¶è¢«æ°å¢æ°ç屬æ§ã
èªæ³
Object.preventExtensions(obj)
忏
obj-
è¦è¢«ç¨ä½ç¡æ³æ´å çç©ä»¶ã
æè¿°
ç©ä»¶å¦æå¯ä»¥è¢«å¢å æ°ç屬æ§ï¼æå稱å®å¯ä»¥è¢«æ´å
(extensible)ãObject.preventExtensions() æ¨è¨»ç©ä»¶ä½¿å®ç¡æ³è¢«æ´å
ï¼æä»¥å¨å®è¢«æ¨è¨»çºç¡æ³æ´å
ç¶ä¸ï¼å®å°ç¡æ³åå¢å æ°ç屬æ§ãä¸é注æä¸é»ï¼å¨ä¸è¬çæ³ä¸ï¼è¢«æ¨è¨»çºç¡æ³æ´å
çç©ä»¶ï¼å
¶å±¬æ§ä»å¯è¢«åªé¤(deleted)ãå試å»å¢å 屬æ§å°æå°è´å¤±æï¼å¯è½ææ²æçµæç¢çï¼ææ¯å³åä¸å TypeError (æå¸¸è¦ï¼ä½ä¸¦ä¸æ¯ä¸å®ï¼ç¶å¨strict mode)ã
Object.preventExtensions() åªæé¿å
ç©ä»¶è¢«å¢å 屬æ§ï¼å±¬æ§ä»å¯ä»¥è¢«å¢å è³ object prototypeãä¸éï¼å¼å« Object.preventExtensions() 使ç¨å¨ç©ä»¶ä¸ï¼å°±å¯ä»¥ä½¿å
¶ Object.prototype.__proto__ 屬æ§ç¡æ³è¢«æ´å
ã
å¦æè½æå¯æ´å ç©ä»¶ï¼è½æç¡æ³æ´å ç©ä»¶ï¼å¨ ECMAScript 5 è¦ç¯ä¸ï¼å®ä¸¦æ²æä»»ä½æ¹æ³è½åä¾ã
ç¯ä¾
// Object.preventExtensions å³åä¸åè¢«ç¡æ³æ´å
çç©ä»¶
var obj = {};
var obj2 = Object.preventExtensions(obj);
obj === obj2; // true
// é è¨ä¸ï¼ç©ä»¶å¯ä»¥è¢«æ´å
var empty = {};
Object.isExtensible(empty); // === true
// ...使¯ä»¥ä¸æ
æ³ä¹å¾ï¼ç¡æ³åè¢«è®æ´ã
Object.preventExtensions(empty);
Object.isExtensible(empty); // === false
// Object.defineProperty throws ç¶çºç¡æ³æ´å
çç©ä»¶å¢å 屬æ§
var nonExtensible = { removable: true };
Object.preventExtensions(nonExtensible);
Object.defineProperty(nonExtensible, "new", { value: 8675309 }); // throws a TypeError
// å¨ strict mode ä¸ï¼åè©¦å»æ°å¢å±¬æ§çµ¦ç¡æ³æ´å
ç©ä»¶ï¼å° throws åºä¸å TypeErrorã
function fail() {
"use strict";
nonExtensible.newProperty = "FAIL"; // throws a TypeError
}
fail();
// EXTENSION (only works in engines supporting __proto__
// (which is deprecated. Use Object.getPrototypeOf instead)):
// A non-extensible object's prototype is immutable.
var fixed = Object.preventExtensions({});
fixed.__proto__ = { oh: "hai" }; // throws a TypeError
çè¨
å¨ ES5 ä¸ï¼å¦æçµ¦ç¥åæ¹æ³ç忏çºéç©ä»¶ï¼å®å°é æä¸å TypeError ãä¸éå¨ ES6 ä¸ï¼éç©ä»¶åæ¸æè¢«æ£å¸¸èçãå¦å¤ï¼å¦æå®åæ¬å°±æ¯åç¡æ³æ´å
ç©ä»¶ï¼å°±åªæ¯å峿¬èº«ã
Object.preventExtensions(1);
// TypeError: 1 is not an object (ES5 code)
Object.preventExtensions(1);
// 1 (ES6 code)
è¦ç¯
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-object.preventextensions> |