对象的 Javascript getter 和 setter,而不是对象属性

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 是一种非常灵活的语言,我想我会在放弃这个想法之前向社区提出这个问题。

Sid*_*rth 3

确实有可能。但仅适用于全局变量。

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

  • 不幸的是,我想使用它的情况不是全局的,但由于这回答了问题,我将标记为已接受。 (2认同)