Object.seal()
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.seal() ã¯éçã¡ã½ããã§ããªãã¸ã§ã¯ããå°å°ãã¾ãããªãã¸ã§ã¯ããå°å°ããã¨ãæ¡å¼µãææ¢ããæ¢åã®ãã¹ã¦ã®ããããã£ãæ§æä¸å¯ã«ãã¾ããå°å°ããããªãã¸ã§ã¯ãã¯ãåºå®ãããããããã£ä¸å¼ãæã¡ã¾ããæ°ããããããã£ã追å ããããæ¢åã®ããããã£ãé¤å»ããããåæå¯è½æ§ãæ§æå¯è½æ§ã夿´ãããããããã¿ã¤ããåå²ãå½ã¦ããããããã¨ã¯ã§ãã¾ãããæ¢åã®ããããã£ã®å¤ã¯ãæ¸ãè¾¼ã¿å¯è½ã§ããéã夿´ãããã¨ãã§ãã¾ãã seal() ã¯æ¸¡ãããªãã¸ã§ã¯ããè¿ãã¾ãã
試ãã¦ã¿ã¾ããã
const object = {
foo: 42,
};
Object.seal(object);
object.foo = 33;
console.log(object.foo);
// äºæ³ãããçµæ: 33
delete object.foo; // å°å°æã¯åé¤ä¸å¯
console.log(object.foo);
// äºæ³ãããçµæ: 33
æ§æ
Object.seal(obj)
弿°
obj-
å°å°ãããªãã¸ã§ã¯ãã§ãã
è¿å¤
å°å°ããããªãã¸ã§ã¯ãã§ãã
解説
ãªãã¸ã§ã¯ããå°å°ããã¨ãæ¡å¼µãææ¢ããæ¢åã®ãã¹ã¦ã®ããããã£ã®è¨è¿°åã configurable: false ã«å¤æ´ãã¾ããããã¯ããªãã¸ã§ã¯ãã«ããããããã£ä¸å¼ãåºå®ãã¤ä¸å¤ã«ãã广ãããã¾ãããã¹ã¦ã®ããããã£ãæ§æä¸å¯ã«ãããã¨ã§ããã¼ã¿ããããã£ããã¢ã¯ã»ãµããããã£ã¸ã®å¤æããã®éãæå¶ãã¾ããããã¼ã¿ããããã£ã®å¤ã®å¤æ´ã¯æå¶ãã¾ãããå°å°ããããªãã¸ã§ã¯ãã§ããããã£ã®åé¤ã追å ããããã¯ãã¼ã¿ããããã£ããã¢ã¯ã»ãµããããã£ã¸ã®å¤æããã³ãã®éããããã¨ããã¨ãæé»çã«å¤±æããããï¼ä¸è¬çã«å³æ ¼ã¢ã¼ãã«ããã¦ã§ãããããã«éããï¼ TypeError ãçºçãã¦å¤±æãã¾ãã
ãã©ã¤ãã¼ãè¦ç´ ã¯ããããã£ã§ã¯ãªããããããã£è¨è¿°åã®æ¦å¿µãããã¾ããããã©ã¤ãã¼ãè¦ç´ ã¯ããªãã¸ã§ã¯ããå°å°ããã¦ãããã©ããã«é¢ãããããªãã¸ã§ã¯ãã«è¿½å ãããé¤å»ããããããã¨ã¯ã§ãã¾ããã
ãããã¿ã¤ããã§ã¼ã³ã«ã¯æãã¤ããããã®ã¾ã¾ã«ãã¾ãããã ããæ¡å¼µã®ææ¢ã®å½±é¿ã«ããã [[Prototype]] ã¯å代å
¥ã§ãã¾ããã
Object.freeze() ã¨ã¯ç°ãªãã Object.seal() ã§å°å°ããããªãã¸ã§ã¯ãã¯ãæ¸ãè¾¼ã¿å¯è½ã§ããéããæ¢åã®ããããã£ã夿´ãããã¨ãã§ãã¾ãã
ä¾
>Object.seal ã®ä½¿ç¨
const obj = {
prop() {},
foo: "bar",
};
// æ°ããããããã£ã追å ã§ããæ¢åã®ããããã£ã¯å¤æ´ãåé¤ãã§ãã
obj.foo = "baz";
obj.lumpy = "woof";
delete obj.prop;
const o = Object.seal(obj);
o === obj; // true
Object.isSealed(obj); // true
// å°å°ããããªãã¸ã§ã¯ãã§ããããããã£ã®å¤ã¯å¤æ´ã§ãã
ï½obj.foo = "quux";
// ãããããã¼ã¿ããããã£ããã¢ã¯ã»ãµããããã£ã®å¤æããã®éã¯ã§ãã¾ããã
Object.defineProperty(obj, "foo", {
get() {
return "g";
},
}); // TypeError ãçºç
// ããããã£ã®å¤ã®å¤æ´ãé¤ãããããã夿´ã失æãã¾ãã
obj.quaxxor = "the friendly duck";
// æé»çã«ããããã£ã¯è¿½å ããã¾ããã
delete obj.foo;
// æé»çã«ããããã£ã¯åé¤ããã¾ããã
// ã¾ãã峿 ¼ã¢ã¼ãã§ã¯ãããã®è©¦ã¿ã«å¯¾ã㦠TypeError ãçºçãã¾ãã
function fail() {
"use strict";
delete obj.foo; // TypeError ãçºç
obj.sparky = "arf"; // TypeError ãçºç
}
fail();
// Object.defineProperty ãç¨ãã¦è¿½å ãããã¨ãã¦ãã¨ã©ã¼ãçºçãã¾ã
Object.defineProperty(obj, "ohai", {
value: 17,
}); // TypeError ãçºç
Object.defineProperty(obj, "foo", {
value: "eit",
}); // æ¢åã®ããããã£ã®å¤ã夿´
éãªãã¸ã§ã¯ãã®å¼·å¶
ES5 ã§ã¯ããã®ã¡ã½ããã¸ã®å¼æ°ããªãã¸ã§ã¯ãã§ã¯ãªãå ´å (ããªããã£ãã§ããå ´å)ã TypeError ã«ãªãã¾ãã ES2015 ã§ã¯ããªãã¸ã§ã¯ãã§ã¯ãªã弿°ã¯å°å°ãããé常ã®ãªãã¸ã§ã¯ãã¨åæ§ã«æ±ãããåç´ã«ãããè¿ãã¾ãã
Object.seal(1);
// TypeError: 1 is not an object (ES5 code)
Object.seal(1);
// 1 (ES2015 code)
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-object.seal> |