嵌套对象的setter/getters

use*_*341 3 javascript javascript-objects

我知道如何使用Javascript设置自定义Setters和Getters Object.defineProperty

我对以下代码片段的意图是,只要修改了globalProject对象中的属性嵌套值,就能够访问setter函数.

var ClassA = function () {
    this.globalProject = {
        a: "DEFAULT VALUE",
        b: null
    };
    this.LastSavedProject = {};

};

Object.defineProperty(ClassA.prototype, 'globalProject', {
    get: function () {
        console.log("OVERRIDE");
        return this._flag;
    },
    set: function (val) {
        console.log("EDITING A DEEP VALUE")
        this._flag = val;
    },
});


var obj = new ClassA();

obj.globalProject.a = "HELLO WORLD" //Should get "EDITING A DEEP VALUE" in the console. 
Run Code Online (Sandbox Code Playgroud)

我想是发生了什么是调用getter方法并返回对我想要修改的对象的引用.因为我从未调用setter,因为我正在修改对嵌套值的引用而不是属性我有一个setter on.

任何人都可以帮我解决这个问题吗?这是一个小提琴:http://jsfiddle.net/z7paqnza/

Pau*_*ito 5

执行时obj.globalProject.a = "HELLO WORLD",只需在控制台中看到"OVERRIDE",因为您获取其值obj.globalProject并设置其数据成员的值a.

您没有在控制台中看到"编辑深度值",因为您从未设置globalProject为引用其他对象,您只需更改其中一个底层对象的数据成员.obj.globalProject = null但是,如果执行类似的操作,则会在控制台上看到"编辑深度值",因为您可能已经更改了对象obj.globalProject所指的内容.看到这个jsfiddle:http://jsfiddle.net/z7paqnza/1/

  • 我明白那个.你怎么建议我实现我想要的目标?谢谢 (2认同)