摘要:使用構(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
摘要:語(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...
摘要:對(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ù)...
摘要:于是我就先把這本薄的經(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í)???..
摘要:第條盡量少使用全局對(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ì)專家??上?..
摘要:但采用構(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的原型存...
閱讀 1675·2021-10-13 09:39
閱讀 2109·2021-09-07 10:20
閱讀 2691·2019-08-30 15:56
閱讀 2958·2019-08-30 15:56
閱讀 939·2019-08-30 15:55
閱讀 638·2019-08-30 15:46
閱讀 3504·2019-08-30 15:44
閱讀 2563·2019-08-30 11:15