提问人:GeorgeCiesinski 提问时间:12/30/2022 更新时间:12/30/2022 访问量:61
有没有办法在 Javascript 中嵌套模拟的命名参数?
Is there a way to nest simulated named parameters in Javascript?
问:
背景
我正在创建一个处理 dom 操作的函数,例如创建元素、在元素上添加/设置一些属性以及将其附加到父级。我想使用命名参数,但从我的研究中我发现这个功能没有内置在 JS 中。这个堆栈溢出问题帮助我通过参数解构“模拟”命名参数,并且我能够让它成功工作:
const createElement = function createNewDomElement({
parent,
tag,
idName,
className,
innerHTML,
href
}={}) {
if (parent) {
console.log(parent); // Works
}
}
Visual Studio Code 提供了一个提示,向我展示了哪些参数可用:
问题和尝试的解决方案
由于其中一些参数是必需的,其余参数是可选的,因此我希望将可选参数分离到函数参数对象中的单独对象中,而不会丢失显示哪些参数可用的 Visual Studio 提示。我试图用:
const createElement = function createNewDomElement({
tag,
options: {
parent,
idName,
className,
innerHTML,
href
}
}={}) {
if (options) {
options.forEach(item => console.log(item));
}
}
但是,当我尝试以与第一个示例中访问父参数相同的方式访问选项时,它说它未定义。
问题
有没有办法以维护显示哪些参数可用的 Visual Studio Code 提示的方式嵌套模拟的命名参数?
我也对有效的解决方案持开放态度,但我失去了提示。
答:
2赞
NirG
12/30/2022
#1
您将无法迭代这些属性,但可以通过这种方式访问它
function createElement({
tag,
options: {
parent,
idName,
className,
innerHTML,
href
}
} = { options: {} }) {
if (parent) {
console.log(parent)
}
}
评论
0赞
GeorgeCiesinski
12/30/2022
只是为了确认,在您的示例中,我能够从选项中访问,只需使用 而不是 .也可以以同样的方式访问吗?这是否只是获取每个对象和嵌套对象,并从它们的名称/值对创建变量?parent
parent
options.parent
tag
options
1赞
NirG
12/30/2022
确切地说,您可以以相同的方式访问,但下面的所有内容只能通过属性名称访问,因此您不能这样做tag
options
options.something
评论