我很好奇当您尝试更改通过class
getter
class A {
constructor () {
let props = { foo: { hello: 'world' } };
Object.defineProperty(this, 'foo', {
get: () => props.foo
});
}
}
let a = new A();
a.foo; // { hello: 'world' }
a.foo.hello = 2;
a.foo.hello === 2; // true or false?
答案 0 :(得分:0)
在返回的对象引用中更改属性也将改变实例的对象引用
class A {
constructor () {
let props = { foo: { hello: 'world' } };
Object.defineProperty(this, 'foo', {
get: () => props.foo
});
}
}
let a = new A();
a.foo; // { hello: 'world' }
a.foo.hello = 2;
a.foo.hello === 2; // true
只有直接返回的值是不可变的,并且赋值不会改变实例的支持:
a.foo = 'noob';
a.foo === 'noob'; // false