原型對象prototype是Object或與之同等級的對象如(function,Number)的一個屬性,protorype是個對象。typeof的值是object。

如果看了上一小節的最后一個例子,對自定義的“類”應該比較熟悉了。
在javascript中,可以說沒有方法,因為函數和字符串一樣也是種數據類型,但類中的函數可以用this關鍵字。下面我說的類的屬性可以是方法,也可以指字段。
在一個自定義“類”中有中有幾個地方可以定義屬性。
?? a、函數名中直接定義。? 如Person.name。在這定義相當于類名的屬性。靜態的,訪問的時候必須用Person.name來訪問,不能用new Person().name訪問,也訪問不到。
?? b、構造函數的this.中。當你用new function()時,這些屬性就是你所持對象的屬性。用new Person().屬性? 來訪問。
?? c、構建好對象以后,給對象增加屬性。和構造函數中的屬性使用類似。
?? d、函數名的prototype中
?? e、父類或Object 的prototype中。

(1)對象屬性優先級
通過運行以下代碼,我們訪問對象屬性優先級如下:c>b>d>e
c種屬性必須在定義以后訪問才有效。a種屬性實例訪問不到。
javascrpt語言預定義的屬性不能用for in 得到。如toString

<SCRIPT?LANGUAGE?=?"JavaScript">?
<!--?
?Object.prototype.toString?
=?function?()??{}?;
Object.prototype.name?
=?"?Object?"?;
Object.prototype.porotype_name?
=?"?oObject?"?;
Object.prototype.parent_name?
=?"?pObject?"?;

Person.prototype.name?
=?"?Person?"?;
Person.prototype.porotype_name?
=?"?oPerson?"?;
?function??Person()??
{
?????
this?.name?=?'Person實例';
}
?
?var??o?
=?new??Person();
?
for?(?var??key??in??o)??{
????alert(key?
+?':'?+?o[key]);
}
?
//?-->?
</?SCRIPT?>?

(2)prototype屬性是只讀的
看如下代碼,你不要試圖通過變量改變原型對象的屬性。你也不可能改變,你只會通過c模式給對象增加一個屬性。
另外原型對象是所有實例共享的。理論上也不可以改變。

<SCRIPT?LANGUAGE?="JavaScript">?
<!--?
Person.prototype.name?
=?"?Person?"?;
?function??Person()??
{
??
}
?
?var??o?
=?new??Person();
?var??o1?
=?new??Person();
alert(
'o.name:'?+?o.name?+?'??'?+?'o1.name:'?+?o1.name);
o.name?
=?'zkj';
alert(
'o.name:'?+?o.name?+?'??'?+?'o1.name:'?+?o1.name);
//?-->?
</SCRIPT>?