0

我期待看到:
设置

得到

15

有人可以向我解释为什么这段代码不起作用吗?谢谢

var myObj = new MyObj();
function CreateSimpleProperty(propertyName) {
    Object.defineProperty(myObj, propertyName, {
        set: function (aVal) {
            this[propertyName] = aVal;
            console.log("Setting");
        },
        get: function () {
            console.log("Getting");
            return this[propertyName];
        }
    });
}

CreateSimpleProperty("TEST");
Overlay.TEST = 15;
console.log(Overlay.TEST);
4

1 回答 1

0

那么,首先,Overlay应该是myObj?假设是这样,您的代码将最终进入无限循环,因为this[propertyName] = aVal;在您的 setter 中将无限地为自己调用 setter。您将需要以其他方式存储该值。在这里,我已将其保存到_TEST,如下所示。

这是代码和一个有效的 jsFiddle:http: //jsfiddle.net/rgthree/3s9Kp/

var myObj = {};
function CreateSimpleProperty(propertyName) {
    Object.defineProperty(myObj, propertyName, {
        set: function (aVal) {
            this['_'+propertyName] = aVal;
            console.log("Setting");
        },
        get: function () {
            console.log("Getting");
            return this['_'+propertyName];
        }
    });
}

CreateSimpleProperty("TEST");
myObj.TEST = 15;
console.log(myObj.TEST);

(显然,我不知道你MyObj是什么或Overlay来自哪里,所以我也为这个例子做了这些修复)。

于 2013-06-20T14:28:56.530 回答