随手翻译ECMA5(二)

8类型(Type) 算法

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

8.6.1属性特性Properties Attributes

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

        

  访问器属性有如下一些特性 prototype


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


8.6.2对象内部属性和方法

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

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

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

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



全部对象(包括宿主对象)必须实现表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()方法。

相关文章
相关标签/搜索