簡體   English   中英

JavaScript定義常量對象屬性

[英]Javascript define a constant object property

我想要一個不可變的對象字段。 我試過了:

 const a = 1; var o = { x: 'This is mutable', y: a // This should not be mutable. }; oy = 'Changed'; console.log(o); 

字段y被重新分配。
有什么辦法可以使這項工作嗎?

var obj = {a:1,b:2};

Object.defineProperty(obj,'b',{
    writable:false
});

obj.b = 3;

console.log(obj.b) //output 2
obj.a = 8; 
console.log(obj.a); //output 8

使用Object.defineProperty()並將可配置設置為false。

var o = {
    x: 'This is mutable'
};
Object.defineProperty(o, "y", { configurable: false, writable: false });

console.log(o);

oy的行為就像單獨調用Object.freeze一樣。

如果您想擁有一個簡單的對象,可以使用Object.defineProperty()

 const tea = {}; Object.defineProperty(tea, 'bar', { value: 'unchanged', writable: false, configurable: false }); console.log(tea.bar); // 'unchanged' tea.bar = 'new value'; console.log(tea.bar); // 'unchanged' delete tea.bar; console.log(tea.bar); // 'unchanged' 

或者,如果需要class ,則可以將getter和no-op setter一起使用:

 class Foo { get bar() { return 'unchanged'; } set bar(_) {} }; const tea = new Foo(); console.log(tea.bar); // 'unchanged' tea.bar = 'new value'; console.log(tea.bar); // 'unchanged' delete tea.bar; console.log(tea.bar); // 'unchanged' 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM