原型對象(JS中的父類)


    原型 prototype

      我們所創建的每一個函數,解析器都會向函數中添加 一個屬性prototype ,這個屬性對應的對象就是我們所謂的原型對象

       判斷函數中是否含有prototype屬性,有則返回 true,否則返回 false

       函數可以是構造函數,也可以是普通函數:

       如果函數作為普通函數調用prototype沒有任何作用     // Person . prototype 

       當函數以構造函數的形式調用時,它所創建的對象中都會有一個隱含的屬性,指向該構造函數的原型對象

        可以通過__proto__來訪問該屬性    // per . __proto__

      原型對象就相當於一個公共的區域,所有同一個類的實例都可以訪問到這個原型對象,我們可以將對象中共有的內容,統一設置到原型對象中

      當我們訪問對象的一個屬性或方法時,它會先在對象自身中尋找,如果有則直接使用,沒有則會去原型對象中尋找,如果找到直接使用

        例如:

          MyClass . prototype . a = 123;   // MyClass 原型對象中插入屬性a,並賦值123

          MyClass . a  = 123 ;  //    MyClass函數自身沒有a的屬性,則去原型MyClass函數中查找

          var  mc = new MyClass( ) ;  //添加構造函數

          mc . a = 456 ;   //  通過MyClass創建新對象 mc中新增 a 屬性,並賦值 456

          console . log( mc . a ) ;    // 此時值是456,自身中找到,就不會去原型中查找

      

      創建構造函數時,可以將這些對象共有的屬性和方法,統一添加到構造函數的原型中,這樣就不用分別為每一個對象添加屬性和方法,

      也不會影響到全局作用域,就可以使每個對象都具有這些屬性和方法了

  

      使用 in 檢查對象中是否含有某個屬性時,如果對象中沒有該屬性,但是原型中有,也會返回 true 

      console . log( ' name '  in  mc ) ;

      可以使用對象的hasOwnProperty( ) 來檢查對象自身是否含有該屬性,使用該方法只有當對象自身中含有屬性時,才會返回 true

      console . log ( mc . hasOwnProperty( 'age' ) ) ;

 

      原型對象也是對象,所以他也有原型,當我們使用一個對象的屬性或方法時,會先在自身中查找。

        自身如果有,則直接使用

        如果沒有則去原型對象中查找,如果原型對象中有,則使用

        如果沒有擇取原型的原型中尋找,直到找到object 對象的原型

        object對象的原型沒有原型(object的__proto__屬性是null),如果在object中依然沒有中找到屬性,則返回undefined

 

        console . log( mc . __proto__ . __proto__ )  


免責聲明!

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



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