亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

[js高手之路]寄生組合式繼承的優勢詳解

發布時間:2020-08-30 23:52:03 來源:腳本之家 閱讀:169 作者:jingxian 欄目:web開發

在之前javascript面向對象系列的文章里面,我們已經探討了組合繼承和寄生繼承,回顧下組合繼承:

function Person( uName ){
      this.skills = [ 'php', 'javascript' ];
      this.userName = uName;
    }
    Person.prototype.showUserName = function(){
      return this.userName;
    }
    function Teacher ( uName ){
      Person.call( this, uName );
    }
    Teacher.prototype = new Person();

    var oT1 = new Teacher( 'ghostwu' );
    oT1.skills.push( 'linux' );
    var oT2 = new Teacher( 'ghostwu' );
    console.log( oT2.skills ); //php,javascript
    console.log( oT2.showUserName() ); //ghostwu

組合繼承有個缺點,父類的構造函數會被調用兩次.

第11行,設置子類原型對象(prototype),調用了第一次

第9行,實例化對象的時候,又調用一次

構造函數的目的是為了復制屬性,第9行肯定是不能少的,第11行的目的是為了獲取到父類原型對象(prototype)上的方法,基于這個目的,有沒有別的方法

可以做到 在不需要實例化父類構造函數的情況下,也能得到父類原型對象上的方法呢? 當然可以,我們可以采用寄生式繼承來得到父類原型對象上的方法

function Person( uName ){
      this.skills = [ 'php', 'javascript' ];
      this.userName = uName;
    }
    Person.prototype.showUserName = function(){
      return this.userName;
    }
    function Teacher ( uName ){
      Person.call( this, uName );
    }

    function object( o ){
      var G = function(){};
      G.prototype = o;
      return new G();
    }

    function inheritPrototype( subObj, superObj ){
      var proObj = object( superObj.prototype ); //復制父類superObj的原型對象
      proObj.constructor = subObj; //constructor指向子類構造函數
      subObj.prototype = proObj; //再把這個對象給子類的原型對象
    }

    inheritPrototype( Teacher, Person );

    var oT1 = new Teacher( 'ghostwu' );
    oT1.skills.push( 'linux' );
    var oT2 = new Teacher( 'ghostwu' );
    console.log( oT2.skills ); //php,javascript
    console.log( oT2.showUserName() ); //ghostwu

其實,說白了寄生組合式繼承就是一個借用構造函數 + 相當于淺拷貝父類的原型對象

以上這篇[js高手之路]寄生組合式繼承的優勢詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

灵丘县| 银川市| 莱芜市| 博客| 惠水县| 浠水县| 外汇| 肥东县| 清苑县| 监利县| 彭山县| 安泽县| 建宁县| 南江县| 靖边县| 镇原县| 沽源县| 山阴县| 克什克腾旗| 饶河县| 宁国市| 枞阳县| 高淳县| 义乌市| 左云县| 陇川县| 商河县| 吉林市| 孝义市| 弥勒县| 缙云县| 贞丰县| 建瓯市| 永登县| 罗江县| 莆田市| 康定县| 布尔津县| 达州市| 白城市| 扎囊县|