【发布时间】:2014-02-26 10:52:51
【问题描述】:
我用 JavaScript 写了一个简单的class(因为需要更好的词)。该类创建了两个访问器(get/set)属性,称为foo 和bar,以及两个方法,称为setProperty 和getProperty。
属性的 get/set 方法调用 getProperty 和 setProperty,它们依次从属性对象中获取和设置属性。
我希望在这里看到无限递归,其中属性调用方法,调用属性,调用方法......等等。
但它确实有效......而且我对这些值的存储方式和存储位置感到困惑!
示例代码
var Test = (function () {
return function Test() {
var $this = this,
properties = {
foo: {
get: function () { return $this.getProperty("foo"); },
set: function (value) { $this.setProperty("foo", value); },
enumerable: false,
configurable: false
},
bar: {
get: function () { return $this.getProperty("bar"); },
set: function (value) { $this.setProperty("bar", value); },
enumerable: false,
configurable: false
}
};
Object.defineProperties(this, properties);
this.getProperty = function (name) {
console.log("get was definitely called!");
return properties[name];
};
this.setProperty = function (name, value) {
console.log("set was definitely called!");
properties[name] = value;
};
};
})();
var test = new Test();
//undefined
test.foo = "Hello World";
//set was definitely called!
//"Hello World"
test.bar = 3;
//set was definitely called!
//3
test.foo;
//get was definitely called!
//"Hello World"
test.bar;
//get was definitely called!
//3
很想知道为什么我不只是得到一个“递归过多”的错误!
【问题讨论】:
标签: javascript recursion methods properties