隨手翻譯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()方法。

相關文章
相關標籤/搜索