我想了解有关此处描述的属性属性的用法的更多信息: http://www.ecma-international.org/ecma-262/5.1/#sec-8.6.1
我可以想象这些属性的用例,但它们非常罕见。 此外,可写、可枚举和可配置属性默认设置为 false,但大多数情况下我希望这些值 true,所以我必须设置它们。为什么它们默认为 false?
创建对象并设置其属性对我来说是非常基本的事情。现在有了属性描述符,我可以将其描述为人造的、不自然的、复杂的或不舒服的。也许我只是错过了一些非常重要的东西。
所以我的问题是:属性的主要用途是什么。我们如何使用它们?
我可以避免使用属性描述符吗?例如,有一些好的模式可以为我设置属性? 例如,如果我使用带有第二个参数“Properties”的 Object.create,它会强制我使用属性描述符。那么我应该避免使用这个吗?
最佳答案
"...mostly I want to have these values true, so I have to set them."
仅当您需要它们时。如果不这样做,则只需使用典型的对象文字语法或新属性的赋值运算符。
"Why are they false by default?"
我想这是因为已经有一个可用的语法将它们默认为true
。
"Make object and set its attributes was very basic thing for me. Now there is property descriptor..."
一切都没有改变。它和以前一样基本。如果您需要的话,还有更多工具可供您使用。
"...which I could describe like artificial, unnatural, complicated or uncomfortable."
语法可能有点麻烦,但如果您不喜欢它,就不要使用它。如果您需要将属性描述符设置为 true
以外的值,那么我认为您会很高兴拥有新功能,而不管其语法如何。
此外,ECMAScript 6 中的对象字面量语法中可能添加了属性描述符定义。
"So my questions are: What is main purpose of property attributes. How can we use them?"
这应该是不言自明的。它们用于手动配置对象属性的可配置
、可写
和可枚举
设置。如果您遇到需要其中一种设置的情况,您就会使用它们。
当然。同样,一切都没有改变。如果你需要他们,他们就在那里。如果不这样做,请忽略它们。"Can I avoid using property descriptor?"
"For example with some good pattern that will set attributes for me?"
不确定你的意思,但如果你想要不同的默认值,只需使用辅助函数,例如:
function addWriteable(obj, prop, value) {
return Object.defineProperty(obj, prop, {
writeable: true
});
}
关于javascript - ECMAScript-5 中属性 "feature"的优点是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16278227/