摘要:設(shè)計(jì)模式閱讀更多文章查看本專欄第二章類閉包實(shí)現(xiàn)類閉包可以理解為類生成器閉包代碼最多只出版本書構(gòu)造器使用使用方法與普通的是一致的。可以使用安全模式避免忘記使用的情況。
JavaScript設(shè)計(jì)模式閱讀
更多文章查看本專欄第二章:類 1、閉包實(shí)現(xiàn)類
閉包可以理解為"類生成器"
閉包代碼:
var Book = (function(){ var bookNum = 0; function checkBook(name){ } return function(newId,newName,newPrice){ var name,price; this.id = newId; bookNum++; if(bookNum > 100){ throw new Error("最多只出版100本書"); } function checkID(id){} this.getName = function(){ console.log(name); return name; }; this.getPrice = function(){ console.log(price); return price; }; this.setName = function (mName) { name = mName; }; this.setPrice = function (mPrice) { price = mPrice; }; this.copy = function () {}; // 構(gòu)造器 this.setName(newName); this.setPrice(newPrice); } })(); Book.prototype = { isJSBook: false, display: function () { } }
使用:
var myBook = new Book("id","name","price");
使用方法與普通的是一致的。
但是如果不加new關(guān)鍵詞的話
var myBook = Book("id","name","price");
當(dāng)不使用new關(guān)鍵詞的時(shí)候只會(huì)將Book執(zhí)行一遍并且this指針為window
并且所有的值都在
可以使用將return的function寫為一個(gè)私有的類,并且將外部的prototype寫在里面,讓閉包看起來更加的舒服,更像是一個(gè)整體。
2、對(duì)象的安全模式在使用類的時(shí)候可能會(huì)忘記使用new關(guān)鍵詞。這個(gè)時(shí)候調(diào)用就像上面說的那種。執(zhí)行一遍代碼,并且其中的this指向window。
可以使用安全模式避免忘記使用new的情況。
列子:
var Book = function (title,time,type) { if(this instanceof Book){ this.title = title; this.time = time; this.type = type; }else{ return new Book(title,time,type); } }
本質(zhì)可以看出就是加了一層判斷。
3、js原型鏈對(duì)引用類型的無力。當(dāng)原型鏈上的值為引用的時(shí)候:
var test = function () { } test.prototype.nums = [1,2,3,4]; ins1 = new test(); ins2 = new test(); console.log(ins2.nums); ins1.nums.push(5); console.log(ins2.nums);
這里就可以看出來如果原型鏈上的值為引用類型的時(shí)候會(huì)出現(xiàn)問題。
4、多繼承多繼承的實(shí)現(xiàn)就是將父類們的所有屬性進(jìn)行拷貝到一個(gè)到當(dāng)前類上。
當(dāng)遇到引用類型的時(shí)候應(yīng)當(dāng)深拷貝,但是此處我們只討論淺拷貝的問題。
以下代碼為多繼承:
var mix = function () { var len = arguments.length; var target = arguments[1]; var arg; for(var i = 1;i < len;i++){ arg = arguments[i]; for(var property in arg){ target[property] = arg[property]; } } return arg; }5、多態(tài)
多態(tài)是對(duì)arguments里面的值得個(gè)數(shù)進(jìn)行統(tǒng)計(jì),根據(jù)不同的情況給予不同的回應(yīng)。
簡(jiǎn)單例子
var add = function () { var len = arguments.length; switch (len) { case 0: return 10; case 1: return 10 + arguments[0]; case 2: return arguments[0] + arguments[1]; } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/100580.html
摘要:設(shè)計(jì)模式與開發(fā)實(shí)踐讀書筆記。發(fā)布訂閱模式又叫觀察者模式,它定義了對(duì)象之間的一種一對(duì)多的依賴關(guān)系。附設(shè)計(jì)模式之發(fā)布訂閱模式觀察者模式數(shù)據(jù)結(jié)構(gòu)和算法系列棧隊(duì)列優(yōu)先隊(duì)列循環(huán)隊(duì)列設(shè)計(jì)模式系列設(shè)計(jì)模式之策略模式 《JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐》讀書筆記。 發(fā)布-訂閱模式又叫觀察者模式,它定義了對(duì)象之間的一種一對(duì)多的依賴關(guān)系。當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴它的對(duì)象都將得到通知。 例...
摘要:設(shè)計(jì)模式與開發(fā)實(shí)踐讀書筆記??创宋恼虑?,建議先看設(shè)計(jì)模式之發(fā)布訂閱模式觀察者模式在中,已經(jīng)介紹了什么是發(fā)布訂閱模式,同時(shí),也實(shí)現(xiàn)了發(fā)布訂閱模式。 《JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐》讀書筆記。 看此文章前,建議先看JavaScript設(shè)計(jì)模式之發(fā)布-訂閱模式(觀察者模式)-Part1 在Part1中,已經(jīng)介紹了什么是發(fā)布-訂閱模式,同時(shí),也實(shí)現(xiàn)了發(fā)布-訂閱模式。但是,就Part1...
摘要:設(shè)計(jì)模式與開發(fā)實(shí)踐讀書筆記??创宋恼虑?,建議先看設(shè)計(jì)模式之發(fā)布訂閱模式觀察者模式在中,已經(jīng)介紹了什么是發(fā)布訂閱模式,同時(shí),也實(shí)現(xiàn)了發(fā)布訂閱模式。 《JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐》讀書筆記。 看此文章前,建議先看JavaScript設(shè)計(jì)模式之發(fā)布-訂閱模式(觀察者模式)-Part1 在Part1中,已經(jīng)介紹了什么是發(fā)布-訂閱模式,同時(shí),也實(shí)現(xiàn)了發(fā)布-訂閱模式。但是,就Part1...
閱讀 1342·2023-04-26 00:10
閱讀 2437·2021-09-22 15:38
閱讀 3802·2021-09-22 15:13
閱讀 3518·2019-08-30 13:11
閱讀 655·2019-08-30 11:01
閱讀 3040·2019-08-29 14:20
閱讀 3220·2019-08-29 13:27
閱讀 1734·2019-08-29 11:33