我在这里不知所措。谁能解释以下控制台输出是如何可能的?为什么在使用 for var p in
进行迭代时 label_multilingual_key
没有显示?
> Object.getOwnPropertyNames(design_element)
(6) ["label_multilanguage_key", "value", "display_priority", "name", "help_text", "hidden"]
> for (var p in design_element) console.log(p);
VM226:1 value_type
VM226:1 element_type
VM226:1 requirement_setting
VM226:1 multiple_values_setting
VM226:1 user_enabled_setting
VM226:1 grid_size_setting
VM226:1 show_to_users
VM226:1 disable_label
undefined
> console.log(design_element)
VM262:1
{label_multilanguage_key: "&&mlkey_enable_filtering_for_id", value: false, display_priority: 6, name: "enable_filtering_for_id", help_text: "&&mlkey_proto_enable_filtering_help_text", …}
display_priority: 6
help_text: "&&mlkey_proto_enable_filtering_help_text"
hidden: true
label_multilanguage_key: "&&mlkey_enable_filtering_for_id"
name: "enable_filtering_for_id"
value: false
__proto__: Object
typeof(design_element)
"object"
回复:如何创建这些对象的问题 - 需要一段时间才能确认,但它应该使用类似的调用来创建
Object.create(element_structure.StaticTextField,{label_multilanguage_key:{value:ML_KEYS.first_name},name:{value:"first_name"}})
如果是这样的话,不可枚举的行为是否可能?或者对象初始化中是否存在明显的错误?
最佳答案
Was there obviously a screw-up in the object initialization?
是的,使用 Object.create
使用属性描述符(如 Object.defineProperties
)创建 non-enumerable properties by default 。我建议使用Object.assign
如果您不想做任何特殊的事情,则可以使用第二个参数:
Object.assign(Object.create(element_structure.StaticTextField), {
label_multilanguage_key: ML_KEYS.first_name,
name: "first_name"
});
关于javascript - "for var in"访问 JS 对象返回所有内容*但*自己的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54330620/