2013-04-29 69 views
0

我想更多地了解这里所描述属性的属性用法: http://www.ecma-international.org/ecma-262/5.1/#sec-8.6.1ECMAScript-5中属性属性“功能”的优点是什么?

我能想象这些属性的usecases,但他们是非常罕见的。 此外,可写,可枚举和可配置属性默认设置为false,但大多数情况下,我希望具有这些值true,所以我必须设置它们。为什么他们默认为假?

设置对象并设置其属性对我来说是非常基本的事情。现在有属性描述符,我可以描述它像人造,非自然,复杂或不舒服。也许我错过了一些非常重要的东西。

所以我的问题是:什么是属性属性的主要目的。我们如何使用它们?

我可以避免使用属性描述符吗?例如有一些好的模式可以为我设置属性?例如,如果我使用Object.create与第二个参数“属性”,它迫使我使用属性描述符。所以我应该避免使用这个?

+0

“*我能避免财产描述符*” - 当然,没有什么是迫使你使用它们。只要做老派财产分配。 – Bergi 2013-04-29 12:14:02

+0

我不知道为什么他们做了默认的'FALSE',但我想这是因为有一个已经与方式的TRUE''默认使性能。你最关心的是什么?如果你想要一些自定义行为WRT的默认值,只需创建一个函数,设置默认值,但是你想要的。 – 2013-04-29 12:33:41

回答

2

“......主要是我想有这些价值观真的,所以我必须设置它们。”

只有当你需要他们。如果不这样做,那么只需使用典型的对象字面值语法,或者使用赋值运算符来获取新属性。

“为什么它们默认为false?”

我会想象这是因为已经有一个可用的语法,默认它们为true

“设置对象并设置其属性对我来说是非常基本的事情。现在有属性描述符...

一切都没有改变,这只是基本,因为它以前。有在您的处置只是更多的工具,如果你需要他们。

” ......我可以描述像人为的,不自然的,复杂的或不舒服。”

的语法可能有点麻烦,但如果你不喜欢它,不要使用它。如果你需要设置的属性描述符以外的东西比true,那么我认为你会很高兴拥有新的功能,而不管它的语法如何。

此外,还有被添加到对象文字语法ECMAScript中6

可能属性描述定义,“所以我的问题是:什么是财产主要用途属性,我们如何能够利用它们”

这应该是不言自明的。它们用于手动配置对象的属性设置configurablewriteableenumerable。如果您遇到过需要其中一种设置的情况,则可以使用它们。

“我可以避免使用属性描述符吗?”

当然。再次,没有任何改变。他们在那里,如果你需要他们。如果你不这样做,那就忽略它们。

“例如有一些好的模式可以为我设置属性?

不知道你的意思,但如果你想不同的默认值,只需使用一个辅助功能,如:

function addWriteable(obj, prop, value) { 
    return Object.defineProperty(obj, prop, { 
     writeable: true 
    }); 
} 
1

为可写默认为false只有

如果没有明确由本规范中指定的属性的值是为命名属性

对于性能你手工定义它会例如,true。你应该知道的是,ecmascript本身没有任何规范和JavaScript/jscript方言之间的巨大差异。

无论哪种方式,一般情况下,除非您正在考虑制作框架或沿着这些线的任何内容,否则不应该对这些属性属性进行任何操作。例如,prototype.js可以使用它来设置Enumerablefalse,我自己使用它来重新定义Get以允许开发人员使用一些特殊的语法(类似于不同的本地语法),但是在执行正常的东西,你不需要它。

+0

带两个参数的Object.create调用了强制我使用属性描述符的defineProperties。那么你的回答暗示我应该避免在这个函数中使用“属性”参数声明?因为否则我认为我应该理解我所设定的事情。 – 2013-04-29 12:49:48

+0

事实上,如果你不需要,不要设置任何东西。 – 2013-04-29 12:54:17