gpt4 book ai didi

javascript - 如何在 JavaScript 中实例化一个对象链

转载 作者:行者123 更新时间:2023-11-30 06:53:55 24 4
gpt4 key购买 nike

一段时间以来,我一直想知道是否有任何更快的方法可以在 javascript 中实例化对象链。

假设我们有以下“对象链”

window.myobject1.myobject2.myobject3 = {}

这当然行不通..因为 object1 和 object2 没有实例化..然而..为了让它工作..我必须做类似的事情:

window.myobject1 = {}
window.myobject1.myobject2 = {}
window.myobject1.myobject2.myobject3 = {}

这看起来很傻..在更现实的情况下..假设我们有

window.server.responses.currentuser.id

其中 server、responses 和 currentuser 只是充当“命名空间”/空实体..有没有什么方法可以告诉 javascript 将整个链实例化为对象?..所以我不需要在新行上实例化链的每个部分?

这可能是一个不好的例子,但我想你明白了..例如我可能还有:

window.server.responses.currentuser.id
window.server.responses.theotherusers.personone.id
window.server.responses.labels.personname

等..

提前致谢!

最佳答案

我以前回答过这个问题,但似乎找不到它,所以不能将其标记为重复(呵呵)。不管怎样,你基本上可以用一个函数来完成:

function deep_set (obj,path,value) {
var name = path.shift();
if (path.length) {
if (typeof obj[name] == undefined) {
obj[name] = {};
}
if (typeof obj[name] == 'string' || typeof obj[name] == 'number') {
throw new Error('attempted to access string or number as object');
}
deep_set(obj[name],path,value);
}
else {
obj[name] = value;
}
}

所以你现在可以:

deep_set(window,['server','responses','currentuser','id'],3);

无需在每一步手动测试 typeof == undefined

只要稍作改动,您就可以让 API 看起来像您想要的那样:

window.deep_set(['server','responses','currentuser','id'],3);
// or
deep_set(window,'server','responses','currentuser','id',3);
// or
deep_set(window,'server.responses.currentuser.id',3);

关于javascript - 如何在 JavaScript 中实例化一个对象链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19659078/

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