gpt4 book ai didi

javascript - 使用点表示法将嵌套属性添加到不存在的属性

转载 作者:行者123 更新时间:2023-12-05 01:03:45 24 4
gpt4 key购买 nike

在 javascript 中,我们可以使用点符号向对象添加新属性

const obj = {}
obj.a = "hello"

console.log(obj) // prints { a: "hello" }

但是,使用点表示法无法将属性添加到 尚不存在的对象

obj.a.b = "hello" // <-- cannot set properties of undefined (setting 'b')
obj.a = { b: "hello" } // <-- OK

我想实现这种行为

const obj = {}
obj.a.b = "hello"

console.log(obj) // prints { a: { b: "hello" } }

我的想法

我能想到的唯一可以接近这一点的就是使用代理

const obj = new Proxy({}, {
set(target, key, receiver) {
// if a.b could make it here before the error is thrown, i'd handle this
// btw, this means that "key" should contain [a,b] which is not how this works.
}
})

obj.a.b = "hello"

代理的想法行不通,可能绝对没有办法像我问的那样改变 JS 的 native 行为,但也许我错过了一些东西?

最佳答案

代理确实工作。您需要使用 get 陷阱而不是 set:

const obj = new Proxy({}, {
get(target, key, receiver) {
if (!(key in target)) return (target[key] = {});

return Reflect.get(target, key);
},
});

obj.a.b = "hello";

console.log(obj);

关于javascript - 使用点表示法将嵌套属性添加到不存在的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73570473/

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