javascript - ECMAScript-5 中属性 "feature"的优点是什么?

标签 javascript ecmascript-5

我想了解有关此处描述的属性属性的用法的更多信息: 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/

相关文章:

javascript - 使用用户输入修改链接

javascript - 当按钮没有 id 时,我如何点击它

javascript - 页面刷新后下拉菜单保留其选择

javascript - 类型 'catch' 上不存在属性 'Observable<IEmployee[]>'

javascript - ES5 : Returning parent function once all items have called back with a forEach

javascript - 如何在 ES5/严格模式下启用正确的尾部调用?

javascript - 从另一个函数调用带有对象参数的函数

javascript - import * as 和 import { default as } 之间的区别

javascript - 如何从 JSON 数组中检索 JSON 数据?

Angular 6目标es5 IE语法错误(箭头函数)