嵌套类对象上的defineProperty

defineProperty on nested class object

本文关键字:defineProperty 对象 嵌套      更新时间:2023-09-26

假设我们有这样的类:

var MyClass = function() {
    this.oneProp = 'one prop';
    this.myProps = {
        prop1: 'my prop1',
        prop2: 'my prop2'
    };
});

如何使用Object.definePropertymyProps.prop1上配置getter/setter,以便在更改myProps.prop1时将myProps.prop2的值设置为,例如'_'+prop1

我发现了一种在oneProp上定义getter/setter的简单方法,使用:

Object.defineProperty(MyClass.prototype, 'oneProp', {
    ...
});

但我不知道如何在myProps.prop1上做同样的事情。

感谢

您可以直接在对象文字中编写getter。

var MyClass = function() {
    this.oneProp = 'one prop';
    this.myProps = {
        prop1: 'my prop1',
        get prop2() { return '_' + this.prop1; },
        set prop2(v) { this.prop1 = v; }
    };
}
var x = new MyClass;
document.write(x.myProps.prop2 + '<br>');
x.myProps.prop2 = 42;
document.write(x.myProps.prop2 + '<br>');