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/
执行时obj.globalProject.a = "HELLO WORLD",只需在控制台中看到"OVERRIDE",因为您获取其值obj.globalProject并设置其数据成员的值a.
您没有在控制台中看到"编辑深度值",因为您从未设置globalProject为引用其他对象,您只需更改其中一个底层对象的数据成员.obj.globalProject = null但是,如果执行类似的操作,则会在控制台上看到"编辑深度值",因为您可能已经更改了对象obj.globalProject所指的内容.看到这个jsfiddle:http://jsfiddle.net/z7paqnza/1/
| 归档时间: |
|
| 查看次数: |
2089 次 |
| 最近记录: |