2011-11-09 86 views
1

我很好奇Javascript的這種設計,也許這種架構或設計模式的任何原因都可以用來利用這一點。在Javascript中,爲什麼構造函數屬性指向原型鏈中最基礎的構造函數?

對象的constructor屬性始終是創建該對象的函數的引用,是否正確?

但是,採取這種代碼:

function base() 
    { 
    this.SayHi = function() 
    { 
     window.alert('Hi'); 
    }; 
    } 

    function subclass() 
    { 
    this.SayBye = function() 
    { 
     window.alert('Bye'); 
    }; 
    } 

    subclass.prototype = new base(); 

    var s = new subclass(); 
    s.SayHi(); 
    s.SayBye(); 
    window.alert(s.constructor); 

最後一行將回顯構造函數base,即使我們知道subclass被稱爲創建對象(否則SayBye是行不通的)。

一個潛在的變通方法是簡單地做:

subclass.prototype.constructor = subclass; 

也許問我的問題的一個更簡潔的方法就是爲什麼s.constructor等於subclass.prototype.constructor而不是subclass.constructor,因爲s是一個instanceof子類。謝謝!

回答

1

所有對象都繼承自它們原型一個constructor屬性。

Source

這就是它的工作原理。你經常看到人們看起來更直觀的東西explicitly setting the constructor property

+0

爲Javascript花園鏈接+1,這是一個有趣的閱讀!解決了我多年來的一些誤解。 –

+0

該陳述令人困惑,因爲它很容易被解釋爲意味着對象的公共原型,而繼承來自* internal * proptotypes。需要對MDN進行另一次編輯。 – RobG

+0

@RobG:謝謝,我會反映新的文字(當你改變它的時候)。 – alex

相關問題