gpt4 book ai didi

javascript - 递归 Object.defineProperty() setter/getter

转载 作者:行者123 更新时间:2023-11-30 16:02:08 25 4
gpt4 key购买 nike

我正在尝试递归地将类构造函数参数中的对象值分配为类的属性。无法弄清楚如何进行递归 - 大多数时候出现“超出最大调用堆栈大小”和无限循环。这是演示:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com