2013-03-16 24 views
1

請問有人可以解釋爲什麼b.prototype.prototype undefined(不是「Object {}」)?匿名和命名函數的第二個原型

a = function(){} 
function b(){} 

console.log(a.prototype)      //Object {} 
console.log(b.prototype)      //b {} 
console.log(a.prototype.prototype)    //undefined 
console.log(b.prototype.prototype)    //undefined 

一個>對象{}>未定義 - 確定

B> B {}> ???

回答

0

這是未定義的,因爲您尚未將任何內容分配給屬性prototype也沒有您創建它。

a.prototype.prototype=a.prototype; 
console.log(a.prototype.prototype)//{} 
0

爲什麼要定義b.prototype.prototype

var a = function() {}; 

a.prototype; // {} 

function b() {} 

b.prototype; // {} 

無論原型有一個名爲prototype屬性...
因此,請求對象的結果在undefined一個nonextant屬性。

控制檯調用b.prototype"b{}"的事實不會改變任何內容。它只是說它是指定功能b的原型對象,而不是匿名函數,如分配給a的函數。

它仍然是一個空的對象,沒有原型。

+0

您可以根據自己的意願進行定義。 a.prototype.prototype = function(){ console.log('hi') return a.prototype; } a()。prototype() // hi – spaceman12 2013-03-16 07:52:56

+0

@ spaceman12當然可以。關鍵是他正在記錄價值。並且控制檯建議,如果不立即記錄'b.prototype.prototype;'而不分配任何東西,則不是'Object {}'它是'b {}',如果'b.prototype'的原型應該是什麼樣的。或者,'instance_of_b .__ proto __.__ proto __;'應該指向......還是,實際上,給定的代碼是:'instance_of_b .__ proto __。prototype;並且所有這些的答案都是一個響亮的' undefined'。 – Norguard 2013-03-16 07:58:59

1

主要是,你好像被b的原型再次變成了b這一事實而困惑 - 事實並非如此。這兩個原型都是對象,因此它們自己沒有原型。構造原型的「toString()」方法(或任何特定的控制檯用於顯示此對象)的實現僅僅是實現特定的,在這種情況下,它包含函數名稱(如果有的話)在輸出中。您可能會在不同的瀏覽器中獲得不同的輸出,例如IE。