我正在尝试递归地将类构造函数参数中的对象值分配为类的属性。无法弄清楚如何进行递归 - 大多数时候出现“超出最大调用堆栈大小”和无限循环。 这是演示:
const Locale = function(rules) {
for (let prop in rules) {
Object.defineProperty(this, prop, {
get: function () {
console.log('getter for "%s" called', prop)
return rules[prop];
}
});
}
}
const rules = {
a: {
b: {
c: 'value'
}
}
}
const locale = new Locale(rules);
console.log(locale.a.b.c);
现在我得到以下控制台输出:
getter for "a" called
value
如何为rules
对象的每一层分配一个getter?预期的控制台输出:
getter for "a" called
getter for "b" called
getter for "c" called
value
最佳答案
您需要为 rules
对象的每个嵌套级别创建一个 Locale
对象:
const Locale = function(rules) {
for (let prop in rules) {
Object.defineProperty(this, prop, {
get: function () {
console.log('getter for "%s" called', prop);
// create new Locale if object, return value if not an object
if( rules[prop] !== null && typeof rules[prop] === 'object' )
return new Locale( rules[prop] );
else
return rules[prop];
}
});
}
}
const rules = {
a: {
b: {
c: 'value'
}
}
}
const locale = new Locale(rules);
console.log(locale.a.b.c);
关于javascript - 递归 Object.defineProperty() setter/getter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37568202/