gpt4 book ai didi

javascript - 为什么这些属性不可枚举?

转载 作者:行者123 更新时间:2023-11-28 17:54:00 25 4
gpt4 key购买 nike

我有一个简单的对象对象:

window.abilities = {
migrate:{
name:"Migrate",
description:"Move your tribe to another area; generate all new resources. Takes one time unit.",
image:"migrate.png",
action:"Migrate",
unlocked:true
},
eradicate:{
name:"Eradicate species",
description:"Remove a troublesome plant or animal",
image:"migrate.png",
action:"Eradicate",
unlocked:false
}
}

我正在使用 for ... in ... 循环来迭代此对象并生成 UI 元素:

for(ability in window.abilities){
if(ability.unlocked){
$("#abilities").append(genAbilityCard(ability.name,ability.image,ability.description,ability.action));
}
}

但是,每个能力变量都是空的 - 它只有键,没有属性(名称、描述等)。这些属性似乎是不可枚举的 - 即使以这种方式创建的属性默认情况下应该是可枚举的!

如何使这些属性可隐式枚举,而不使用 Object.defineProperty 或类似的笨重东西?

最佳答案

如果您能够使用 ES6 和 for...of 循环,Alberto 的答案是您最好的选择,也是最干净的选择。

如果您仅限于 ES5,您也可以使用 for ... in 。正如您所发现的,for ... in 仅枚举键(属性名称),而不是属性值,但是一旦知道属性名称,就可以轻松获取属性值:

var abilityName, ability;

for(abilityName in window.abilities){
ability = window.abilities[abilityName];
if(ability.unlocked){
$("#abilities").append(genAbilityCard(ability.name,ability.image,ability.description,ability.action));
}
}

您获得属性名称的事实意味着您正在成功枚举属性。 Javascript 的 for ... in 工作方式有点奇怪。

关于javascript - 为什么这些属性不可枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44872667/

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