Javascript中的每個物件(object)都會有 prototype 。試試看:
var Richard = new Object(); 🎜>alert(typeof(Richard.prototype));
結果令人鬱悶,瀏覽器彈出來的是undefined…
到底是怎麼回事呢?
再看一個例子:
複製程式碼 程式碼如下: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 屬性。