随手翻译ECMA5(二)

8类型(Type)

   接上篇。随手翻译ECMA5(一)

8.6.1属性特性Properties Attributes

     属性特性是本规范用来定义和解析属性状态的,数据属性有以下一些特性。

随手翻译ECMA5(二)_第1张图片        

  访问器属性有以下一些特性

随手翻译ECMA5(二)_第2张图片

如果某个属性的属性特性的值在本规范中没有明确给出,那么将使用下表的默认值。

随手翻译ECMA5(二)_第3张图片


8.6.2对象内部属性和方法

本规范使用许多内部属性来定义对象值的语义。这些内部属性不是ECMAScript语言的一部分,在此规范中定义它们纯粹是为了说明的作用。ECMAScript的实现必须像是在这些内部属性上进行操作。内部属性的名称用双方括号括起来。当一个算法需要用到一个对象的内部属性的时候,如果此对象并没有实现此内部属性,会抛出一个TypeError异常。

8中列出了本规范中适用于所有ECMAScript对象的内部属性。

9中列出了只适用于部分ECMAScript对象的内部属性。这些列表的内部属性表明了原生ECMAScript对象的行为,那些在本规范其他地方有特别声明的对象除外。宿主对象可以通过自己的具体实现来支持这些内部属性,只要它与本规范中的限制保持一致。

表格中“值类型的域”这一列定义内部属性的值的类型。这些类型的名称在第八章中定义,还补充了以下一些内容。“any”代表可以为任何的ECMAScript语言类型。“primitive”代表NullUndefinedNumberBooleanString。“SpecOp”代表这个内部属性是一个内部方法,它的具体实现符合特定的操作规范。SpecOp”后面跟着一个描述性的参数列表,如果这个参数的名字是一个类型名称,则表示这个参数是这个类型。如果方法有返回值得话,则在参数列表后面跟着一个“→”符号,则“→”后面的就是此方法返回值的类型。

随手翻译ECMA5(二)_第4张图片

随手翻译ECMA5(二)_第5张图片

随手翻译ECMA5(二)_第6张图片


所有对象(包括宿主对象)必须实现表8列出的内部属性。然而,对于有些对象来说,[[DefaultValue]]这个内置方法只是简单地抛出TypeError异常。

所有对象都有[[Prototype]]这个内部属性,这个内部属性是null或者是一个用于继承的对象。一个本地对象是否可以拥有一个宿主对象作为其[[Prototype]]属性取决于具体的实现。所有的[[Prototype]]链必须是有限长的(起始于一个对象,然后递归地链接其内部属性[[Prototype]],最后链接到null上)。从原型对象继承来的数据属性只能进行读操作而不能进行写操作。从原型对象继承来的访问器属性可进行读操作和写操作。

所有的ECMAScript对象都有一个Boolean类型的[[Extensible]]属性,这个属性表明能否向对象添加属性。如果[[Extensible]]属性是false则表明不能向此对象添加属性。另外,如果[[Extensible]]属性是false,对象的[[Class]]内部属性和[[Prototype]]内部属性不能修改。一旦[[Extensible]]属性被设置为false就不能更改为true了。

提示:本规范规定任何的表达式或内置方法都不能改变一个对象的[[Class]][[Prototype]]属性,也不能把对象的[[Extensible]]属性从false更改为true。对于特定的实现可以修改[[Class]][[Prototype]][[Extensible]]属性,但不能违反本章之前的约定。

本规范中的所有内置对象都定义了[[Class]]属性,宿主对象的[[Class]]属性的值可以是任意的字符串,但不能是以下字符串的其中之一。

Arguments”,  “Array”, “Boolean”, “Date”, “Error”, “Function”,

      “JSON”, “Math”, “Number”, “Object”, “RegExp”,“String

        [[Class]]属性用来区分不同类型的对象。注意本规范中没有提供任何方法让程序去访问[[Class]]属性,除了通过Object.prototype.toString()方法。




你可能感兴趣的:(ECMA5中文)