比較詳細的javascript對象的property和prototype是什么一種關系
2024-09-06 12:41:54
供稿:網友
ECMAScript可以識別兩種類型的對象,一種叫做Native Object屬于語言范疇;一種叫做Host Object,由運行環境提供例如document對象,
Dom Node等
Native objects是一種松散的結構并且可以動態的增加屬性(property),所有的屬性都有一個名字和一個值,這個值可以是另一個對象的引用
或者是內建的數據類型(String, Number, Boolean, Null 或者 Undefined)
下面的這個簡單的例子描述了一個javascript對象是如何設置一個屬性的值和如何讀取屬性的值的。
賦值操作
一個對象的屬性的創建非常簡單,直接通過賦值操作就可以完成屬性的創建。
代碼
1. var objectRef = new Object(); //create a generic javascript object.
一個名為testNumber的屬性可以這樣創建。
代碼
1. objectRef.testNumber = 5;
2. /* - or:- */
3. objectRef["testNumber"] = 5;
如果復制的屬性名稱已經存在那么不會再次創建這個屬性,賦值操作僅僅是重新設置屬性的值
代碼
1. objectRef.testNumber = 8;
2. /* - or:- */
3. objectRef["testNumber"] = 8;
js對象的原型(prototype)自己本身也可以是對象,也可以有屬性(property),對于js對象的(prototype)的賦值操作跟普通對象屬性的創建
沒什么不同。
取值操作
在取值操作中property和prototype就不一樣了,先看最簡單的property取值操作。
代碼
1. /*為一個對象的屬性賦值,如果這個對象沒有這個屬性,那么在賦值操作后,這個對象就有這個屬性了 */
2. objectRef.testNumber = 8;
3. /* 讀出這個屬性的值 */
4. var val = objectRef.testNumber;
5.
6. /* 現在val 就得到了剛才賦予objectRef的值8了*/
prototype揭密
但是所有的對象都可以有prototypes, prototypes自己也是對象,那么他也可以有prototypes,這樣循環下去就形成了一個prototype鏈,
這個鏈當他遇到鏈中隊形的prototype是null時中止。(Object的默認的prototype是null)
代碼
1. var objectRef = new Object(); //create a generic javascript object.
創建一個新的js對象,這時這個對象的prototype是Null,所以objectRef的prototype鏈只包含一個對象Object.prototype