当你改变一个用getter获取的对象时会发生什么

What happens when you alter an object retrieved with a getter?

本文关键字:对象 什么 获取 getter 改变 一个 当你      更新时间:2023-09-26

我很好奇当你试图改变通过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?

改变返回对象引用中的属性也会改变实例的对象引用

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

只有直接返回的值是不可变的,赋值不会改变实例的prop val:

a.foo = 'noob'; 
a.foo === 'noob'; // false

相关文章: