更改使用getter检索的对象时会发生什么?

时间:2016-10-29 22:02:48

标签: javascript ecmascript-6

我很好奇当您尝试更改通过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?

1 个答案:

答案 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