我希望有一个不可变的对象字段。我试过了:
const a = 1;
var o = {
x: 'This is mutable',
y: a // This should not be mutable.
};
o.y = 'Changed';
console.log(o);

重新分配字段y
有没有办法让这项工作?
答案 0 :(得分:2)
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
答案 1 :(得分:2)
使用Object.defineProperty()
并将configurable设置为false。
var o = {
x: 'This is mutable'
};
Object.defineProperty(o, "y", { configurable: false, writable: false });
console.log(o);
o.y的行为就好像是单独调用了Object.freeze。
答案 2 :(得分:1)
如果您想拥有一个简单的对象,可以使用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'

或者,如果您需要a class,则可以使用getter和无操作设置器:
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'