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

資訊專欄INFORMATION COLUMN

讀書(shū)筆記-1【javascript語(yǔ)言精粹】繼承

malakashi / 634人閱讀

摘要:使用構(gòu)造器有個(gè)嚴(yán)重的危害,如果在調(diào)用構(gòu)造器函數(shù)的時(shí)候忘記使用前綴,不僅不會(huì)綁定到新對(duì)象,還會(huì)污染全局變量原型模式原型模式中,我們采用對(duì)象來(lái)繼承。

構(gòu)造器調(diào)用模式

當(dāng)一個(gè)函數(shù)對(duì)象被創(chuàng)建時(shí),F(xiàn)unction構(gòu)造器會(huì)運(yùn)行類似這樣的代碼:

this.prototype = {constructor: this}

new一個(gè)函數(shù)事會(huì)發(fā)生:

Function.method("new", function() {
    // 創(chuàng)建新對(duì)象,繼承原型
    let that = Object.create(this.prototype);
    // 調(diào)用構(gòu)造函數(shù),綁定this到新對(duì)象
    let res = this.apply(that, arguments);
    return typeof res === "object" && res || that;
}); 
偽類繼承
let Mammal = function(name) {
    this.name = name;
}
Mammal.prototype.get_name = function() {
    return this.name;
}

// 構(gòu)造一個(gè)實(shí)例
let myMammal = new Mammal("zhangsan");
// 利用偽類繼承Mammal
let Cat = function(name) {
    this.name = name;
    this.age = age;
}

Cat.prototype = new Mammal();
Cat.prototype.get_age = function() {
    return this.age;
}

let myCat = new Cat("miao");

以上就是一個(gè)簡(jiǎn)單的偽類繼承。使用構(gòu)造器有個(gè)嚴(yán)重的危害,如果在調(diào)用構(gòu)造器函數(shù)的時(shí)候忘記使用new前綴,this不僅不會(huì)綁定到新對(duì)象,還會(huì)污染全局變量;

原型模式

原型模式中,我們采用對(duì)象來(lái)繼承。

let myMammal = {
    name: "aa",
    age: 22,
    get_name: function() {
        return this.name;
    }
}

let myCat = Object.create(myMammal);
Cat.get_age = function() {
    return this.age;
}

這種繼承方式,導(dǎo)致沒(méi)有私有屬性和私有函數(shù)

函數(shù)化模式

它的每一層都是在擴(kuò)充that

Function.prototype.method = function (name,func) {
    this.prototype[name] = func;
    return this; 
}
// 工廠mammal函數(shù)
var mammal = function (spec) {
    var that = {};

    that.get_name = function () {
        return spec.name;
    }
    that.says = function (spec) {
        return spec.saying || "";
    } 

    return that;
}

// 工廠cat函數(shù)(基于mammal的函數(shù))
var cat = function (spec) {
    spec.saying = spec.saying || "meow";
    // 直接調(diào)用mammal函數(shù)
    var that = mammal(spec);
    that.purr = function (n) {
        var i, s = "";
        for (i = 0; i < n; i += 1) {
            if(s) {
                s += "-";
            }
            s += "r";
        }
    }
    that.get_name = function () {
        return that.says() + " " + spec.name + " " + that.says();
    }
    return that;
}

// 創(chuàng)建myCat對(duì)象
var myCat = cat({name: "Henrietta"});

Object.method("superior",function (name) {
    var that = this,
        method = that[name];
    return function () {
        return method.apply(that, arguments)
    }
})

// 工廠coolcat函數(shù)(基于cat函數(shù))
var coolcat = function (spec) {
    var that = cat(spec),
        super_get_name = that.superior("get_name");
    that.get_name = function (n) {
        return "like " + super_get_name() + " baby";
    }
    return that;
}

var myCoolCat = coolcat({name : "Bix"});

var name = myCoolCat.get_name();
部件

沒(méi)看懂。。

let eventuality = function(that) {
    let registry = {};
    that.fire = function(event) {
        let array, 
            func,
            handler,
            i,
            type = typeof event === "string" ? event : event.type;
        if (registry.hasOwnProperty(type)) {
            array = registry[type];
            for(i = 0; i < array.length; i++) {
                handler = array[i];
                func = handler.method;
                if (typeof func === "string") {
                    func = this[func];
                }
                func.apply(this, handler.parameters || [events]);
            }
        }
        return this;
            
    }
    that.on = function(type, method, parameters) {
        let handler= {
            method,
            parameters
        };
        if (registry.hasOwnProperty(type)) {
            registry[type].push(handler);
        } else {
            registry[type] = [handler];
        }
        return this;
    }
    return that;
}

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

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

相關(guān)文章

  • JavaScript 語(yǔ)言精粹讀書(shū)筆記 - 函數(shù)

    摘要:語(yǔ)言精粹讀書(shū)筆記第四章函數(shù)函數(shù)字面量函數(shù)字面量包含個(gè)部分第一部分,保留字第二部分,函數(shù)名,它可以被忽略。這個(gè)超級(jí)延遲綁定使得函數(shù)對(duì)高度復(fù)用。構(gòu)造器調(diào)用模式一個(gè)函數(shù),如果創(chuàng)建的目的就是希望結(jié)合的前綴來(lái)調(diào)用,那它就被稱為構(gòu)造器構(gòu)造。 《JavaScript 語(yǔ)言精粹》 讀書(shū)筆記 第四章 函數(shù) Functions 函數(shù)字面量 函數(shù)字面量包含4個(gè)部分: 第一部分, 保留字 function...

    wdzgege 評(píng)論0 收藏0
  • JavaScript 語(yǔ)言精粹讀書(shū)筆記 - 函數(shù)(二)

    摘要:對(duì)象被傳遞到從句中被捕獲。一些語(yǔ)言提供了尾遞歸優(yōu)化。這意味著如果一個(gè)函數(shù)返回自身遞歸調(diào)用的結(jié)果,那么調(diào)用的過(guò)程會(huì)被替換為一個(gè)循環(huán),可以顯著提高速度。構(gòu)建一個(gè)帶尾遞歸的函數(shù)。語(yǔ)言精粹讀書(shū)筆記函數(shù) 第四章 函數(shù) Functions (二) 參數(shù) arguments arguments數(shù)組: 函數(shù)可以通過(guò)此參數(shù)訪問(wèn)所有它被調(diào)用時(shí)傳遞給它的參數(shù)列表,包括哪些沒(méi)有被分配給函數(shù)聲明時(shí)定義的形式參數(shù)...

    lufficc 評(píng)論0 收藏0
  • JavaScript語(yǔ)言精粹 修訂版》 讀書(shū)筆記

    摘要:于是我就先把這本薄的經(jīng)典書(shū)語(yǔ)言精粹修訂版豆瓣讀書(shū)本書(shū)簡(jiǎn)介總共章,除去附錄,才頁(yè),讀完并記錄了一些筆記。讀書(shū)筆記還可以分享給別人看。編程語(yǔ)言第版定義了的標(biāo)準(zhǔn)。程序檢查時(shí)丟棄值為函數(shù)的屬性。 之前看到這篇文章,前端網(wǎng)老姚淺談:怎么學(xué)JavaScript?,說(shuō)到怎么學(xué)習(xí)JavaScript,那就是看書(shū)、分析源碼。10本書(shū)讀2遍的好處,應(yīng)該大于一本書(shū)讀20遍。看書(shū)主動(dòng)學(xué)習(xí),看視頻是被動(dòng)學(xué)習(xí)???..

    EscapedDog 評(píng)論0 收藏0
  • 讀書(shū)筆記:編寫(xiě)高質(zhì)量javascript的68個(gè)方法

    摘要:第條盡量少使用全局對(duì)象避免聲明全局變量盡量聲明局部變量避免對(duì)全局變量增加屬性第條始終聲明局部變量第條避免使用語(yǔ)句第條熟練使用閉包的函數(shù)值包含了比調(diào)用他們時(shí)執(zhí)行所需要的代碼還要更多的信息。那些在其所涵蓋的作用域內(nèi)跟蹤變量的函數(shù)稱為閉包。 書(shū)還沒(méi)看完。一遍看,一遍寫(xiě)讀書(shū)筆記。 這本書(shū)的序是JavaScript之父Brendan Eich寫(xiě)的,作者是JavaScript標(biāo)準(zhǔn)化委員會(huì)專家??上?..

    Vicky 評(píng)論0 收藏0
  • javascript語(yǔ)言精粹》學(xué)習(xí)筆記 - 繼承

    摘要:但采用構(gòu)造器調(diào)用模式,即是使用了前綴去調(diào)用一個(gè)函數(shù)時(shí),函數(shù)執(zhí)行的方式會(huì)改變。對(duì)象包含構(gòu)造器需要構(gòu)造一個(gè)新的實(shí)例的所有信息。構(gòu)造器的變量和內(nèi)部函數(shù)變成了該實(shí)例的私有成員。 JavaScript 是一門(mén)弱類型語(yǔ)言,從不需要類型轉(zhuǎn)換。對(duì)象繼承關(guān)系變得無(wú)關(guān)緊要。對(duì)于一個(gè)對(duì)象來(lái)說(shuō)重要的時(shí)它能夠做什么,而不是它從哪里來(lái)。 閱讀《javascript語(yǔ)言精粹》筆記! 偽類 js的原型存...

    harriszh 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

malakashi

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<