Baseline Widely available
Object.freeze()
éçã¡ã½ããã¯ããªãã¸ã§ã¯ããåçµãã¾ãããªãã¸ã§ã¯ããåçµããã¨ãæ¡å¼µãã§ããªããªããæ¢åã®ããããã£ã¯æ¸ãè¾¼ã¿ãæ§æãä¸å¯è½ã«ãªãã¾ããæ°ããããããã£ã追å ããããæ¢åã®ããããã£ãåé¤ããããåæå¯è½æ§ãæ§æå¯è½æ§ãæ¸ãè¾¼ã¿å¯è½æ§ãå¤ã夿´ãããããªãã¸ã§ã¯ãã®ãããã¿ã¤ããå代å
¥ããããããã¨ã¯ã§ãã¾ããã freeze()
ã¯ã渡ããããªãã¸ã§ã¯ãã¨åããã®ãè¿ãã¾ãã
ãªãã¸ã§ã¯ãã®åçµã¯ JavaScript ãæä¾ããæãé«ãå®å ¨æ§ã¬ãã«ã§ãã
試ãã¦ã¿ã¾ãããconst obj = {
prop: 42,
};
Object.freeze(obj);
obj.prop = 33;
// Throws an error in strict mode
console.log(obj.prop);
// Expected output: 42
æ§æ 弿°
obj
åçµãããªãã¸ã§ã¯ãã§ãã
ãã®é¢æ°ã«æ¸¡ããããªãã¸ã§ã¯ãã§ãã
説æãªãã¸ã§ã¯ããåçµãããã¨ã¯ãæ¡å¼µãç¦æ¢ããæ¢åã®ãã¹ã¦ã®ããããã£ã®è¨è¿°åã® configurable
ã false
ã«å¤æ´ãããã¨ãããã¦ãã¼ã¿ããããã£ã«ã¤ãã¦ã¯ã writable
ãåæ§ã« false
ã«å¤æ´ãããã¨ã¨åãã§ããåçµãããªãã¸ã§ã¯ãã®ããããã£è¨å®ã«ã¯ãä½ã追å ãããé¤å»ããããããã¨ã¯ã§ãã¾ããããããè¡ããã¨ããã¨ãéãã«ãããã㯠TypeError
ä¾å¤ãçºçãã失æãã¾ãï¼å³æ ¼ã¢ã¼ãã®å ´åã«ããçºçãã¾ãããããã«éã£ããã¨ã§ã¯ããã¾ããï¼ã
åçµããããªãã¸ã§ã¯ãã®ããããã£ã¯ã writable
屿§ã¨ configurable
屿§ã false
ã«è¨å®ããã¦ãããããå¤ã夿´ãããã¨ã¯ã§ãã¾ãããã¢ã¯ã»ãµããããã£ï¼ã²ãã¿ã¼ã¨ã»ãã¿ã¼ï¼ãåãããã«åä½ãã¾ããã²ãã¿ã¼ã«ãã£ã¦è¿ãããããããã£å¤ã¯å¤æ´ãããå¯è½æ§ããããã»ãã¿ã¼ã¯ããããã£ãè¨å®ããéã«ã¨ã©ã¼ãçºçããããã¨ãªãå¼ã³åºããã¨ãã§ãã¾ãããªãã¸ã§ã¯ãã§ããå¤ã¯ãåçµããã¦ããªãéã夿´ãããã¨ãã§ãããã¨ã«æ³¨æãã¦ãã ãããé
åã¯ãªãã¸ã§ã¯ãã¨ãã¦åçµãããã¨ãã§ããåçµå¾ã¯ãã®è¦ç´ ã夿´ããããé
åã«è¦ç´ ã追å ãããé¤å»ããããããã¨ã¯ã§ããªããªãã¾ãã
ãã©ã¤ãã¼ãè¦ç´ ã¯ããããã£ã§ã¯ãªããããããã£è¨è¿°åã®æ¦å¿µãããã¾ããããã©ã¤ãã¼ãè¦ç´ ãæã¤ãªãã¸ã§ã¯ããåçµãã¦ãããã©ã¤ãã¼ãè¦ç´ ã®å¤ã夿´ããããã¨ã¯ããã¾ãããï¼ãªãã¸ã§ã¯ãã®åçµã¯é常ãå¤é¨ã³ã¼ãã«å¯¾ããã»ãã¥ãªãã£å¯¾çã¨ãã¦æå³ãã¦ãã¾ãããå¤é¨ã³ã¼ãã¯ãããã«ãããã©ã¤ãã¼ãè¦ç´ ã«ã¢ã¯ã»ã¹ãããã¨ã¯ã§ãã¾ãããï¼ãªãã¸ã§ã¯ããåçµããã¦ãã¦ãããªãã¦ãããã©ã¤ãã¼ãè¦ç´ ããªãã¸ã§ã¯ãã«è¿½å ãããé¤å»ããããããã¨ã¯ã§ãã¾ããã
freeze()
ã¯é¢æ°ã«æ¸¡ããããã®ã¨åããªãã¸ã§ã¯ããè¿ãã¾ããåçµãããã³ãã¼ãçæãã訳ã§ã¯ããã¾ããã
è¦ç´ ãæã¤ TypedArray
ã DataView
㯠TypeError
ã«ãªãã¾ãããããã¯ã¡ã¢ãªã¼ä¸ã®ãã¥ã¼ã§ãããä»ã«ãå¯è½ãªåé¡ã確å®ã«å¼ãèµ·ããã¾ãã
Object.freeze(new Uint8Array(0)); // è¦ç´ ãªã
// Uint8Array []
Object.freeze(new Uint8Array(1)); // è¦ç´ ãã
// TypeError: è¦ç´ ãå«ãé
åãããã¡ã¼ãã¥ã¼ã¯åçµã§ããªã
Object.freeze(new DataView(new ArrayBuffer(32))); // è¦ç´ ãªã
// DataView {}
Object.freeze(new Float64Array(new ArrayBuffer(64), 63, 0)); // è¦ç´ ãªã
// Float64Array []
Object.freeze(new Float64Array(new ArrayBuffer(64), 32, 2)); // è¦ç´ ãã
// TypeError: è¦ç´ ãå«ãé
åãããã¡ã¼ãã¥ã¼ã¯åçµã§ããªã
ãªããæ¨æºã® 3 ã¤ã®ãããã㣠(buf.byteLength
, buf.byteOffset
, buf.buffer
) ã¯èªã¿åãå°ç¨ã§ãã®ã§ï¼ArrayBuffer
ã¾ã㯠SharedArrayBuffer
ã®å ´åï¼ããããã®ããããã£ãåçµãããã¨ããçç±ã¯ããã¾ããã
Object.seal()
ã¨ã¯ç°ãªãã Object.freeze()
ã«ãã£ã¦åçµããããªãã¸ã§ã¯ãã®æ¢åã®ããããã£ã¯ä¸å¤ã¨ãªãããã¼ã¿ããããã£ã«ã¯ä»£å
¥ã§ããªããªãã¾ãã
const obj = {
prop() {},
foo: "bar",
};
// åçµå: æ°ããããããã£ã追å ã§ãã
// æ¢åã®ããããã£ã¯å¤æ´ãåé¤ãã§ãã¾ã
obj.foo = "baz";
obj.lumpy = "woof";
delete obj.prop;
// åçµ
const o = Object.freeze(obj);
// è¿å¤ã¯æ¸¡ãããªãã¸ã§ã¯ãã¨ã¾ã£ããåããã®ã§ãã
o === obj; // true
// ãªãã¸ã§ã¯ãã¯åçµããã¦ãã¾ãã
Object.isFrozen(obj); // === true
// ãã¹ã¦ã®å¤æ´ã失æããããã«ãªãã¾ãã
obj.foo = "quux"; // æé»çã«ä½ãè¡ããã¾ãã
// æé»çã«ããããã£ã¯è¿½å ããã¾ãã
obj.quaxxor = "the friendly duck";
// ã¾ãã峿 ¼ã¢ã¼ãã§ã¯ãããã®è©¦ã¿ã«å¯¾ã㦠TypeError ãçºçãã¾ã
function fail() {
"use strict";
obj.foo = "sparky"; // TypeError ãçºç
delete obj.foo; // TypeError ãçºç
delete obj.quaxxor; // 屿§ 'quaxxor' ã追å ããããã¨ããªããã true ãè¿ã
obj.sparky = "arf"; // TypeError ãçºç
}
fail();
// Object.defineProperty ãã夿´ã試ã¿ã¾ããã
// 以ä¸ã®ã©ã¡ãã®æã TypeError ãçºçãã¾ãã
Object.defineProperty(obj, "ohai", { value: 17 });
Object.defineProperty(obj, "foo", { value: "eit" });
// ãããã¿ã¤ãã夿´ãããã¨ãã§ããã
// 以ä¸ã®ã©ã¡ãã®æã TypeError ãçºçãã¾ãã
Object.setPrototypeOf(obj, { x: 20 });
obj.__proto__ = { x: 20 };
é
åã®åçµ
const a = [0];
Object.freeze(a); // é
åã夿´ã§ããªããªãã¾ããã
a[0] = 1; // æé»ã«å¤±æ
// 峿 ¼ã¢ã¼ãã§è©¦ã¿ã㨠TypeError ãçºçãã¾ã
function fail() {
"use strict";
a[0] = 1;
}
fail();
// push ã試ã¿ã
a.push(2); // TypeError ãçºç
åçµããããªãã¸ã§ã¯ãã¯ä¸å¤ã«ãªãã¾ãããããã宿°ã§ããã¨ã¯éãã¾ããã以ä¸ã®ä¾ã§ã¯ãåçµããããªãã¸ã§ã¯ãã宿°ã§ã¯ãªããã¨ã示ãã¦ãã¾ãï¼åçµãæµ ãï¼ã
const obj1 = {
internal: {},
};
Object.freeze(obj1);
obj1.internal.a = "aValue";
obj1.internal.a; // 'aValue'
宿°ãªãã¸ã§ã¯ãã«ãªãã«ã¯ãåç §ã®ã¤ãªããå ¨ä½ï¼ä»ã®ãªãã¸ã§ã¯ãã¸ã®ç´æ¥ã¾ãã¯éæ¥çãªåç §ï¼ãä¸å¤ã§åçµããããªãã¸ã§ã¯ãã®ã¿ãåç §ãã¦ããªããã°ãªãã¾ãããåçµããããªãã¸ã§ã¯ãã¯ããªãã¸ã§ã¯ãå ¨ä½ã®ä¸ã«ãããªãã¸ã§ã¯ãã®ç¶æ ï¼å¤ã¨ä»ã®ãªãã¸ã§ã¯ãã¸ã®åç §ï¼ããã¹ã¦åºå®ããã¦ããã®ã§ãä¸å¤ã¨ãããã¨ãã§ãã¾ãããªããæååãæ°å¤ãçå½å¤ã¯ãã¹ã¦ä¸å¤ã¨ãªãã颿°ãé åã¯ãªãã¸ã§ã¯ãæ±ãã§ãã
æ·±ãåçµObject.freeze(object)
ãå¼ã³åºããçµæã¯ãobject
ã®ç´å±ã®ããããã£ã«ã®ã¿é©ç¨ãããobject
ä¸ã®ã¿ã«å¯¾ãããã®å¾ã®ããããã£ã®è¿½å ãåé¤ãå¤ã®å代å
¥æä½ãç¦æ¢ãã¾ãããããã®ããããã£ã®å¤ããªãã¸ã§ã¯ããã®ãã®ã§ãã£ãå ´åããããã®ãªãã¸ã§ã¯ãã¯åçµããããããããã£ã®è¿½å ãåé¤ãå¤ã®å代å
¥æä½ã®å¯¾è±¡ã«ãªãå¾ã¾ãã
const employee = {
name: "Mayank",
designation: "Developer",
address: {
street: "Rohini",
city: "Delhi",
},
};
Object.freeze(employee);
employee.name = "Dummy"; // 峿 ¼ã¢ã¼ãã§ãªããã°æé»ã«å¤±æ
employee.address.city = "Noida"; // åãªãã¸ã§ã¯ãã®å±æ§ã¯å¤æ´ã§ãã
console.log(employee.address.city); // åºå: "Noida"
ãªãã¸ã§ã¯ããä¸å¤ã«ããã«ã¯ããªãã¸ã§ã¯ãåã®ããããã£ãããããå帰çã«åçµããã¦ãã ããï¼æ·±ãåçµï¼ããªãã¸ã§ã¯ããåç
§ã°ã©ãã«éè·¯ãå«ã¾ãªããã¨ãåãã£ã¦ããå ´åã¯ããã¶ã¤ã³ãã¿ã¼ã³ã«åºã¥ãã¦ã±ã¼ã¹ãã¤ã±ã¼ã¹ã®ãã¿ã¼ã³ã使ç¨ãã¦ãã ãããããã§ãªãã¨ãç¡éã«ã¼ããçºçãã¾ããä¾ãã°ãfunction
æ§æã§ä½æããã颿°ã¯ãprototype
ããããã£ã«ãã®é¢æ°èªèº«ãæãã³ã³ã¹ãã©ã¯ã¿ã¼ããããã£ããããããæ¢å®ã§ã¯å¾ªç°åç
§ãçºçãã¾ãããã®ä»ã®é¢æ°ï¼ã¢ãã¼é¢æ°ãªã©ï¼ã¯ãããã§ãåçµãããã¨ãã§ãã¾ãã
deepFreeze()
ããã¹ï¼ä¾ãã°é
åï¼å¼æ°ãåãåãå
é¨é¢æ°ãæã¤ããæ¡å¼µããã¨ããªãã¸ã§ã¯ããä¸å¤ã«ããããã»ã¹ã«ããã¨ãã«ã deepFreeze()
ãå帰çã«å¼ã³åºããããã¨ãé²ããã¨ãã§ãã¾ããä¸ä¾ã¨ãã¦ãWeakSet
ã使ç¨ãã¦å¾ªç°åç
§ãæ¤åºããæ¹æ³ãã覧ãã ãããåçµããã¦ã¯ãããªã window
ã®ãããªãªãã¸ã§ã¯ããåçµãããå±éºæ§ããªãããã¾ãã
function deepFreeze(object) {
// ãªãã¸ã§ã¯ãã§å®ç¾©ãããããããã£åãåå¾
const propNames = Reflect.ownKeys(object);
// èªåèªèº«ãåçµããåã«ããããã£ãåçµ
for (const name of propNames) {
const value = object[name];
if ((value && typeof value === "object") || typeof value === "function") {
deepFreeze(value);
}
}
return Object.freeze(object);
}
const obj2 = {
internal: {
a: null,
},
};
deepFreeze(obj2);
obj2.internal.a = "anotherValue"; // 峿 ¼ã¢ã¼ãã§ãªããã°æé»ã«å¤±æ
obj2.internal.a; // null
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ
å ±
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