wac*_*cko 5 javascript getter setter properties object
我知道如何像这样使用 JS 的 getter 和 setter 来处理对象属性
var myObject = {
value : 0,
get property() {
return this.value;
},
set property(v) {
this.value = v;
}
}
Run Code Online (Sandbox Code Playgroud)
这样调用myObject.property = 2
就会设置myObject.value
,但我想知道是否有某种方法可以调用myObject = 2
并且仍然设置myObject.value
而不是myObject
从对象更改为数字。
这可能是不可能的,但 javascript 是一种非常灵活的语言,我想我会在放弃这个想法之前向社区提出这个问题。
确实有可能。但仅适用于全局变量。
Object.defineProperties(this, {
myObject: {
get: function () {
return myObjectValue;
},
set: function (value) {
myObjectValue = value;
},
enumerable: true,
configurable: true
},
myObjectValue: {
value: 0,
enumerable: false,
configurable: true,
writable: true
}
});
myObject = 5;
console.log(myObject);
console.log(delete myObject);
Run Code Online (Sandbox Code Playgroud)
现在,每次您为 分配一个值时myObject
,它实际上都会运行该set
函数并将该值分配给另一个属性。现在,如果您想最大程度地减少污染,您可以创建一个 IIFE 并在其中使用变量来保存值本身。
http://jsbin.com/zopefuvi/1/edit
这是带有 IIFE 的版本。
http://jsbin.com/puzopawa/1/edit