Baseline Widely available
Object.freeze()
ë©ìëë ê°ì²´ë¥¼ ëê²°í©ëë¤. ëê²°ë ê°ì²´ë ë ì´ì ë³ê²½ë ì ììµëë¤. ì¦, ëê²°ë ê°ì²´ë ìë¡ì´ ìì±ì ì¶ê°íê±°ë ì¡´ì¬íë ìì±ì ì ê±°íë ê²ì ë°©ì§íë©° ì¡´ì¬íë ìì±ì ë¶ë³ì±, ì¤ì ê°ë¥ì±(configurability), ìì± ê°ë¥ì±ì´ ë³ê²½ëë ê²ì ë°©ì§íê³ , ì¡´ì¬íë ìì±ì ê°ì´ ë³ê²½ëë ê²ë ë°©ì§í©ëë¤. ëí, ëê²° ê°ì²´ë ê·¸ íë¡í íì
ì´ ë³ê²½ëëê²ë ë°©ì§í©ëë¤. freeze()
ë ì ë¬ë ëì¼í ê°ì²´ë¥¼ ë°íí©ëë¤.
const obj = {
prop: 42,
};
Object.freeze(obj);
obj.prop = 33;
// Throws an error in strict mode
console.log(obj.prop);
// Expected output: 42
구문 매ê°ë³ì ë°í ê°
í¨ìë¡ ì ë¬ë ê°ì²´.
ì¤ëªëê²° ê°ì²´ì ìì± ì§í©ìë ì´ë í ê²ë ì¶ê°íê±°ë ì ê±°í ì ìì¼ë©°, 그리 íë ¤ë 모ë ìëë ì¡°ì©í ëì´ê°ê±°ë, TypeError
ìì¸ê° ë°ìíë©° ì¤í¨í©ëë¤. ìì¸ ë°ìì ë³´íµ ì격 모ëì¸ ê²½ì° ë°ìíì§ë§, ë°ëì ì격 모ëë¡ë§ ì íëë ê²ì ìëëë¤.
ëê²° ê°ì²´ê° ê°ì§ ë°ì´í° ìì±ì ëí´ì , ê°ì ë³ê²½í ì ìì¼ë©° ì¤ì ê°ë¥ ì¬ë¶ì ì°ê¸° ê°ë¥ ì¬ë¶ ìì± ëª¨ë ê±°ì§ì´ ë©ëë¤. ì ê·¼ì ìì±(ì ê·¼ìì ì¤ì ì)ë ëì¼íê² ëìí©ëë¤(ëí ê°ì ë³ê²½íê³ ìë¤ë íìì ì¤ëë¤). ìì ëë ê°ì´ ê°ì²´ì´ê³ ëê²°ë ê²ì´ ìëë¼ë©´ ì¬ì í ìì ì´ ê°ë¥í¨ì ì ìíì¸ì. ê°ì²´ë¡ì¨, ë°°ì´ë ëê²°ë ì ììµëë¤. ëê²°í ì´íìë ê·¸ ì리먼í¸ë¥¼ ë³ê²½í ì ìì¼ë©° ë°°ì´ì ì´ë í ì리먼í¸ë ì¶ê°íê±°ë ì ê±°í ì ììµëë¤.
freeze()
ë í¨ìì ì ë¬í ê°ì²´ë¥¼ ê·¸ëë¡ ë°ííë©°, ëê²°ë ê°ì²´ ì¬ë³¸ì ìì±íë ê²ì´ ìëëë¤.
var obj = {
prop: function () {},
foo: "bar",
};
// ëê²° ì´ì : ì ìì±ì ì¶ê°í ì ìê³ ,
// 기존 ìì±ì ë³ê²½íê±°ë ì ê±°í ì ìì
obj.foo = "baz";
obj.lumpy = "woof";
delete obj.prop;
// ëê²°
var 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.setPrototype(obj, { x: 20 });
obj.__proto__ = { x: 20 };
ë°°ì´ ëê²°
let a = [0];
Object.freeze(a); // ì´ì ë°°ì´ì ìì í ì ìì.
a[0] = 1; // ì¡°ì©íê² ì¤í¨
a.push(2); // ì¡°ì©íê² ì¤í¨
// ì격 모ëììë ì´ë° ìëì ëí´ TypeError ë°ì
function fail() {
"use strict";
a[0] = 1;
a.push(2);
}
fail();
ëê²°ë ê°ì²´ë ë³ê²½í ì ììµëë¤. íì§ë§, ê¼ ê·¸ë ì§ë§ì ììµëë¤. ë¤ì ìì ë ëê²°ë ê°ì²´ê° ë³ê²½ë ì ììì(ìì ëê²°) ë³´ì¬ì¤ëë¤.
obj = {
internal: {},
};
Object.freeze(obj);
obj.internal.a = "aValue";
obj.internal.a; // 'aValue'
ë³ê²½ë ì ìë ê°ì²´ê° ëë ¤ë©´, 모ë 참조 ê·¸ëí(ë¤ë¥¸ ê°ì²´ë¡ì ì§ê°ì ì 참조)ê° ì¤ë¡ì§ ë¶ë³ì ëê²° ê°ì²´ë§ì 참조í´ì¼ í©ëë¤. ëê²°ë ê°ì²´ë ê°ì²´ ë´ì 모ë ìí(ë¤ë¥¸ ê°ì²´ë¡ì ê°ê³¼ 참조)ê° ê³ ì ë기 ë문ì ë¶ë³íë¤ê³ í©ëë¤. 문ìì´, ì«ì, ë¶ë¦¬ì¸ ê°ì ì¸ì ë ë¶ë³íê³ , í¨ìì ë°°ì´ì ê°ì²´ìì ì ìíì¸ì.
"ìì ëê²°"ì´ ë¬´ìì¸ê°ì?Object.freeze(object)
í¸ì¶ì ê²°ê³¼ë object
ì¤ì¤ë¡ì ì§ì ìì±ìë§ ì ì©ëë©°, object
ì ëí´ìë§ ìì± ì¶ê°, ì ê±°, ì¬í ë¹ ì°ì°ì ë°©ì§í©ëë¤. ë§ì½ ê·¸ ìì±ì ê°ì´ ê°ì²´ë¼ë©´, ê·¸ ê°ì²´ë ëê²°ëì§ ìì¼ë©° ìì± ì¶ê°, ì ê±°, ì¬í ë¹ì ëìì´ ë ì ììµëë¤.
var 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"
ê°ì²´ë¥¼ ë¶ë³íê² ë§ë¤ë ¤ë©´, ê° ê°ì²´ íì
ì ìì±ì ì¬ê·ì ì¼ë¡ ëê²°í´ì¼í©ëë¤(ê¹ì ëê²°). ê°ì²´ê° ê·¸ 참조 ê·¸ëíìì ìíì í¬í¨íì§ ìëë¤ë ê²ì ì¸ì§íê³ ìì ë, ëìì¸ì 기ë°ì¼ë¡ ìí©ì ë°ë¼ í¨í´ì ì ì©í´ì¼íë©°, ê·¸ë ì§ ìì ê²½ì° ë°ë³µë¬¸ì´ 무íí ì¤íë ì ììµëë¤. deepFreeze()
ì ëí ê°ì ì ê°ì²´ê° ë¶ë³íê² ëë ê³¼ì ì ìì ë deepFreeze()
ì ì¬ê·ì ì¸ í¸ì¶ì ì°¨ë¨í ì ìëë¡ ê²½ë¡(ì, ë°°ì´) ì¸ì를 ë°ë ë´ë¶ í¨ì를 ìì íë ê²ì
ëë¤. [window]ì ê°ì, ëê²°ëë©´ ìëë ê°ì²´ë¥¼ ëê²°íë ê²ì ëí ìíì ì¬ì í ë¨ì ììµëë¤.
function deepFreeze(object) {
// ê°ì²´ì ì ìë ìì±ëª
ì ì¶ì¶
var propNames = Object.getOwnPropertyNames(object);
// ì¤ì¤ë¡ë¥¼ ëê²°í기 ì ì ìì±ì ëê²°
for (let name of propNames) {
let value = object[name];
object[name] =
value && typeof value === "object" ? deepFreeze(value) : value;
}
return Object.freeze(object);
}
var obj2 = {
internal: {
a: null,
},
};
deepFreeze(obj2);
obj2.internal.a = "anotherValue"; // ë¹ì격 모ëìì ì¡°ì©íê² ì¤í¨
obj2.internal.a; // null
ì¬ì© ë
¸í¸
ES5ììë, ì´ ë©ìëì ëí ì¸ìê° ê°ì²´(ììí)ê° ìë ê²½ì°, TypeError
ê° ë°ìí©ëë¤. ES2015ììë, ë¹ê°ì²´ ì¸ìê° ëê²°ë íë²í ê°ì²´ì¸ê²ì²ë¼ ë¤ë£¨ì´ì ¸ ë°íë©ëë¤.
> Object.freeze(1)
TypeError: 1 is not an object // ES5 code
> Object.freeze(1)
1 // ES2015 code
ì리먼í¸ë¥¼ ê°ë ArrayBufferView
ë ë©ëª¨ë¦¬ë¥¼ íµí ë·°ì´ë¯ë¡ ë¤ë¥¸ ê°ë¥í 문ì 를 ì ë° í ì ìì´ TypeError
ê° ë°ìí©ëë¤.
> Object.freeze(new Uint8Array(0)) // ì리먼í¸ê° ìì
Uint8Array []
> Object.freeze(new Uint8Array(1)) // ì리먼í¸ë¥¼ ê°ì§
TypeError: Cannot freeze array buffer views with elements
> 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: Cannot freeze array buffer views with elements
ì¸ ê°ì§ íì¤ ìì±(buf.byteLength
, buf.byteOffset
, buf.buffer
)ì ì½ê¸° ì ì©(ì´ë¤ì {jsxref("ArrayBuffer")}} ëë SharedArrayBuffer
ì´ë¯ë¡)ì´ë¯ë¡, ì´ë¬í ìì±ì ëí´ ëê²°ì ìëí ì´ì ê° ììì ì ìí©ëë¤.
Object.seal()
ê³¼ì ë¹êµ
Object.seal()
ì ì¬ì©í´ ë´ì¸ë ê°ì²´ë ì¡´ì¬íë ìì±ì ë³ê²½í ì ììµëë¤. Object.freeze()
ë¡ ëê²°ë ê°ì²´ììë ì¡´ì¬íë ìì±ì´ ë¶ë³ì
ëë¤.
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