成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Node.js中的繼承

fxp / 2589人閱讀

摘要:借用構(gòu)造函數(shù)借助或使用構(gòu)造函數(shù)缺少函數(shù)復(fù)用原型鏈繼承使用指向?qū)ο笞宇悷o法給父類傳遞參數(shù)無法使用字面量添加新方法所有子類對象共享父類所有方法和屬性引用類型組合繼承借用構(gòu)造函數(shù)對實(shí)例屬性繼承對共享方法繼承會調(diào)用兩次父類構(gòu)造函數(shù)繼承

借用構(gòu)造函數(shù),借助call或apply,使用Superclass構(gòu)造函數(shù),缺少函數(shù)復(fù)用

function Superclass(name = "default") {
        this.name = name;
    }
    
    function Subclass(age = 22, name) {
        this.age = age;
        Superclass.call(this, name);
        this.say = function () {
            console.log(`this.name=${this.name}...this.age=${this.age}`);
        };
    }
    
    const test = new Subclass(23);
    test.say();
    console.log(`test instanceof Subclass`, test instanceof Subclass);
    console.log(`test instanceof Superclass`, test instanceof Superclass);
    console.log(test.__proto__.constructor);
    console.log(Subclass.prototype.constructor);

原型鏈繼承,使用prototype指向Superclass對象,子類無法給父類傳遞參數(shù),無法使用字面量添加新方法,所有子類對象共享父類所有方法和屬性(引用類型)

    function Superclass(name = "default") {
        this.name   = name;
        this.colors = ["r", "y"];
    }

    function Subclass(age = 22) {
        this.age = age;
        this.say = function () {
            console.log(`this.name=${this.name}...this.age=${this.age}`);
        };
    }

    Subclass.prototype             = new Superclass();
    Subclass.prototype.constructor = Subclass;

    const test  = new Subclass(23);
    const test1 = new Subclass(24);
    test.colors.push("b");
    console.log(test.colors);
    console.log(test1.colors);
    test.say();
    test1.say();
    console.log(`test instanceof Subclass`, test instanceof Subclass);
    console.log(`test instanceof Superclass`, test instanceof Superclass);
    console.log(test.__proto__.constructor);
    console.log(Subclass.prototype.constructor);

組合繼承,prototype+call/apply,借用構(gòu)造函數(shù)對實(shí)例屬性繼承,prototype對共享方法繼承,會調(diào)用兩次父類構(gòu)造函數(shù)

    function Superclass(name = "default") {
        this.name = name;
    }

    Superclass.prototype.say = function () {
        console.log(this.name);
    };

    function Subclass(age = 22, name) {
        this.age = age;
        Superclass.call(name);
    }

    Subclass.prototype             = new Superclass();
    Subclass.prototype.constructor = Subclass;

    const test = new Subclass(23);
    test.say();
    console.log(`test instanceof Subclass`, test instanceof Subclass);
    console.log(`test instanceof Superclass`, test instanceof Superclass);
    console.log(test.__proto__.constructor);
    console.log(Subclass.prototype.constructor);

ES6 Class繼承

    class Superclass {
        constructor(name = "default") {
            this.name = name;
        }
    }
    class Subclass extends Superclass {
        constructor(age = 22, name) {
            super(name);
            this.age = age;
        }

        say() {
            console.log(`this.name=${this.name}...this.age=${this.age}`);
        }
    }

    const test = new Subclass(23);
    test.say();
    console.log(`test instanceof Subclass`, test instanceof Subclass);
    console.log(`test instanceof Superclass`, test instanceof Superclass);
    console.log(test.__proto__.constructor);
    console.log(Subclass.prototype.constructor);

Node util.inherits;

    function Superclass(name = "default") {
        this.name = name;
    }

    function Subclass(age = 22, name) {
        this.age = 22;
        Superclass.call(this, name);

        this.say = function () {
            console.log(`this.name=${this.name}...this.age=${this.age}`);
        };

    }

    require("util").inherits(Subclass, Superclass);

    const test = new Subclass(23);
    test.say();
    console.log(`test instanceof Subclass`, test instanceof Subclass);
    console.log(`test instanceof Superclass`, test instanceof Superclass);
    console.log(test.__proto__.constructor);
    console.log(Subclass.prototype.constructor);

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/81456.html

相關(guān)文章

  • Node.js 中 Java類的定義,set、get方法,類的實(shí)例化,繼承的實(shí)現(xiàn),方法重寫:學(xué)習(xí)心得

    摘要:一實(shí)體類的定義定義類有參構(gòu)造方法二定義方法以設(shè)置實(shí)體類的屬性值方法三定義方法以獲取實(shí)體類的屬性值方法四構(gòu)造實(shí)例對象使用全參構(gòu)造方法獲取實(shí)例對象桐人男控制臺打印實(shí)例 一、Node.js 實(shí)體類 的定義 //定義類Person 有參構(gòu)造方法 function Person(name, sex, age, addr, salary) { this.name = name; t...

    fjcgreat 評論0 收藏0
  • Node.js 開發(fā)指南 讀書筆記

    摘要:為指定事件注冊一個監(jiān)聽器,接受一個字符串和一個回調(diào)函數(shù)。發(fā)射事件,傳遞若干可選參數(shù)到事件監(jiān)聽器的參數(shù)表。為指定事件注冊一個單次監(jiān)聽器,即監(jiān)聽器最多只會觸發(fā)一次,觸發(fā)后立刻解除該監(jiān)聽器。 1.Node.js 簡介 Node.js 其實(shí)就是借助谷歌的 V8 引擎,將桌面端的 js 帶到了服務(wù)器端,它的出現(xiàn)我將其歸結(jié)為兩點(diǎn): V8 引擎的出色; js 異步 io 與事件驅(qū)動給服務(wù)器帶來極高...

    CocoaChina 評論0 收藏0
  • 前端文檔收集

    摘要:系列種優(yōu)化頁面加載速度的方法隨筆分類中個最重要的技術(shù)點(diǎn)常用整理網(wǎng)頁性能管理詳解離線緩存簡介系列編寫高性能有趣的原生數(shù)組函數(shù)數(shù)據(jù)訪問性能優(yōu)化方案實(shí)現(xiàn)的大排序算法一怪對象常用方法函數(shù)收集數(shù)組的操作面向?qū)ο蠛驮屠^承中關(guān)鍵詞的優(yōu)雅解釋淺談系列 H5系列 10種優(yōu)化頁面加載速度的方法 隨筆分類 - HTML5 HTML5中40個最重要的技術(shù)點(diǎn) 常用meta整理 網(wǎng)頁性能管理詳解 HTML5 ...

    jsbintask 評論0 收藏0
  • 前端文檔收集

    摘要:系列種優(yōu)化頁面加載速度的方法隨筆分類中個最重要的技術(shù)點(diǎn)常用整理網(wǎng)頁性能管理詳解離線緩存簡介系列編寫高性能有趣的原生數(shù)組函數(shù)數(shù)據(jù)訪問性能優(yōu)化方案實(shí)現(xiàn)的大排序算法一怪對象常用方法函數(shù)收集數(shù)組的操作面向?qū)ο蠛驮屠^承中關(guān)鍵詞的優(yōu)雅解釋淺談系列 H5系列 10種優(yōu)化頁面加載速度的方法 隨筆分類 - HTML5 HTML5中40個最重要的技術(shù)點(diǎn) 常用meta整理 網(wǎng)頁性能管理詳解 HTML5 ...

    muddyway 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<