Javascript中的每個對象(object)都會有prototype 。試一下:
複製代碼代碼如下:
var Richard = new Object();
alert(typeof(Richard.prototype));
結果令人鬱悶,瀏覽器彈出來的是undefined……
到底是怎麼回事呢?
再看一個例子:
複製代碼代碼如下:
function Richard(){}
alert(typeof(Richard.prototype));
上面的例子似乎說明,只有function 對象才有prototype, 而一般的Object 對像是沒有prototype 的,事實怎樣呢?
我們再來執行一句就明白了:
複製代碼代碼如下:
var Richard = new Object();
alert(Richard.__proto__);
是不是明白了?
其實我們都有一個誤區,就是認為形成Javascript 對象的prototype chain 的prototype 就是一個名字為prototype 的屬性,而且是可以訪問的。其實,Javascript 的prototype 和名字為prototype 的屬性在一開始一點兒關係都沒有,是兩個不同的事物。
對於一般對象來說,我們只能通過__proto__ 這樣的屬性去訪問從Object 對象繼承來的prototype;
對於函數對象來說,在其建立的時候,已經將Function對象的prototype 賦值給了prototype 屬性。