自动创建属性不起作用

时间:2013-06-20 14:13:05

标签: javascript syntax properties getter-setter javascript-1.8

我期待看到:
设置

获取

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);

1 个答案:

答案 0 :(得分:0)

嗯,首先,Overlay应该是myObj吗?假设是这样,你的代码将以无限循环结束,因为你的setter中的this[propertyName] = aVal;将无限地为自己调用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来自哪里,所以我也为这个例子做了修复。