我想了解更多关于属性属性的用法,在这里描述:http://www.ecma-international.org/ecma-262/5.1/#sec-8.6.1
我可以想象这些属性的用法,但它们非常罕见。此外,默认情况下,可写、可枚举和可配置的属性设置为false,但大多数情况下,我希望拥有这些值true,因此必须设置它们。为什么在默认情况下它们是假的?
创建对象并设置它的属性对我来说是非常基本的事情。现在有了财产描述符,我可以把它描述为人为的,不自然的,复杂的或不舒服的。也许我只是错过了一些非常重要的东西。
所以我的问题是:属性的主要用途是什么?我们如何使用它们?
我可以避免使用属性描述符吗?例如,有一些很好的模式可以为我设置属性?--例如,如果我在第二个param "Properties“中使用Object.create,它会强制我使用属性描述符。所以我应该避免使用这个吗?
发布于 2013-04-29 12:52:39
"...mostly我希望这些值为真,所以我必须设置它们。“
除非你对他们有需要。如果没有,那么只需使用典型的对象字面语法,或者对新属性使用赋值操作符。
“为什么他们在默认情况下是假的?”
我可以想象这是因为已经有一种语法可以默认为true。
"Make object并设置它的属性对我来说是非常基本的事情。现在有了属性描述符.“
什么都没变。它和以前一样基本。如果你需要的话,你只需要更多的工具。
"...which我可以形容为人造的,不自然的,复杂的或不舒服的。“
语法可能有点麻烦,但是如果您不喜欢它,就不要使用它。如果您需要将属性描述符设置为true以外的东西,那么我认为您会很高兴拥有新功能,而不管它的语法如何。
此外,在ECMAScript 6中,有可能将属性描述符定义添加到对象字面语法中。
“因此,我的问题是:财产属性的主要目的是什么。我们如何使用它们?”
这应该是不言自明的。它们用于手动配置对象上属性的configurable、writeable和enumerable设置。如果你遇到需要这些设置之一的情况,你就会使用它们。
“我能避免使用属性描述符吗?”
当然了。再一次,一切都没有改变。如果你需要的话他们就在那里。如果你没有,那就忽略他们。
“例如,有一些好的模式可以为我设置属性吗?”
不确定您的意思,但是如果您想要不同的默认值,只需使用一个助手函数,例如:
function addWriteable(obj, prop, value) {
return Object.defineProperty(obj, prop, {
writeable: true
});
}发布于 2013-04-29 12:18:50
只有在以下情况下,可写性的缺省值为false
如果此规范未为命名属性显式指定属性值,则为
例如,对于手工定义的属性,它将是true。您应该注意的是,ecmascript本身在没有任何规范的情况下与javascript/jscript方言之间有着巨大的差异。
无论哪种方式,通常您都不应该使用这些属性属性做任何事情,除非您正在考虑创建一个框架或类似于这些属性的任何东西。例如,prototype.js可以使用它将Enumerable设置为false,我自己也使用它来重新定义Get,以允许开发人员更容易地使用(类似于不同的本机语法)的异域语法,但在执行正常操作时,您并不需要它。
https://stackoverflow.com/questions/16278227
复制相似问题