JS類、原型對象、構造函數之間的關系


    作為一個WEB的初學者來說,一提到類就頭痛的要死(我是這樣,不知道我是不是以偏概全了),經過幾天的研究,終於有了一些眉目,今天特地把它寫出來,給和我有一樣困惑的童鞋,大家共同探討,共同進步,有什么不對的地方,請下方給我留言,廢話不多說,進入正題吧。

 

   首先,大家要知道,在JS中,對象有三種創建方式:對象直接量關鍵字newObject.create()函數(不常用)。

   對象直接量:   var point = {x:1, y:1};

   關鍵字new:   var point = new Function();

    對象直接量是一個表達式,這個表達式每次運算都創建並初始化一個新的對象。每次計算對象直接量的時候,也都會計算它的每個屬性值。不便於創造大量相同的對象,不利於使用繼承。而關鍵字new則可能使用繼承的方式。

    

    原型對象:每一個JS對象(null除外)都和另一個對象相關聯。“另一個對象”就是我們熟知的原型,每一個對象都從原型繼承屬性。

                 通過對象直接量創建的對象都具有同一個原型對象,並可以通過Object.prototype獲得對原型對象的引用。

                 

                通過關鍵字new和構造函數調用創建的對象的原型就是構造函數的prototype屬性的值。

                

               沒有原型的對象為數不多,Object.prototype算一個,它不繼承任何屬性。其他原型對象都是普通對象,普通對象都具有原型。Object.prototype是祖宗,其他的構造                函數都是它兒子或者孫子、重孫子。它的孫子的原型是他兒子,同樣也是它,因為他兒子是繼承它的,這樣一來,每個對象都繼承至少一個原型對象,這一系列鏈接的原                型對象就是所謂的“原型鏈”。

     

    :在JS中,類的實現是基於起原型的繼承機制的。如果兩個實例都從一個原型對象上繼承了屬性,我們就說它們是一個類的實例。類的所有實例對象都從一個原型對象上繼承屬         性。因此,原型對象是類的核心。

    構造函數:構造函數是用來初始化新創建的對象的。在JS中構造函數沒有准確的定義它是什么,當任意一個普通函數用於創建一類對象時,它就被稱為構造函數(構造器)。我           感覺構造函數最主要的一點就是在函數內部,應當對this進行設置和引用。

 

    使用new操作符調用構造函數,開始會創建一個空對象,然后將空對象的_proto_指向了構造函數的prototype,最后會將構造函數的作用域賦給空對象。

    prototype:每一個函數中都會有一個prototype,這個指向他的原型對象;

    _proto_:存在每一個對象中,這個指向他的原型對象(原型鏈);(自我認為)

 

   構造函數相當於皇上,類就相當於皇太后,垂簾聽政。新對象的原型對象不是構造函數本身,而是他的prototype屬性。

    第一次發文章,感覺自己寫的不好,但這是盡我自己最大的努力,我會積累經驗,希望寫出更清晰、更容易理解的文章,來服務大家。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM