摘要:閉包實(shí)現(xiàn)封裝類靜態(tài)變量靜態(tài)方法正整數(shù)私有屬性年齡不是一個(gè)正整數(shù)一個(gè)只能創(chuàng)建個(gè)人測試靜態(tài)變量測試封裝效果測試靜態(tài)函數(shù)主要參考設(shè)計(jì)模式的例子總結(jié)可以看到這樣實(shí)現(xiàn)了封裝效果。
什么是封裝
封裝就是把一個(gè)對象保護(hù)起來,使其只提供定義的接口方法,而保護(hù)私有的變量。打個(gè)比方,游戲中的一個(gè)人物對象,它的經(jīng)驗(yàn)只有通過打死怪獸這個(gè)接口方法來增加。如果可以直接修改經(jīng)驗(yàn)就會(huì)直接影響到整個(gè)游戲的設(shè)定。所以這個(gè)時(shí)候經(jīng)驗(yàn)這個(gè)屬性就是一個(gè)需要保護(hù)的變量。
封裝之利封裝保護(hù)了私有屬性,不用擔(dān)心這些屬性會(huì)被接口以外的方法以外的修改。更好的解耦。實(shí)現(xiàn)迪米特法則(最少知道原則)(Demeter Principle)
封裝之弊私有方法無法做單元測試,只能對共有方法做單元測試,單元測試用例的設(shè)計(jì)可能需要對共有方法的覆蓋增加保證覆蓋越多的私有方法。靈活性降低。對需要封裝的對象做很好的理解才能實(shí)現(xiàn)別人調(diào)用時(shí)候需要的接口可以被獲取。
閉包實(shí)現(xiàn)封裝類var Person = (function () { // 靜態(tài)變量 var PersonCount = 0; // 靜態(tài)方法 function checkage(age) { var r = /^+?[1-9][0-9]*$/; //正整數(shù) return r.test(age); } return function (name, age) { // 私有屬性. var name, age; this.getName = function () { return name; } this.getAge = function () { return age; } this.setName = function (name) { name = name || "No Name"; }; this.setAge = function (age) { if (!checkage(age)) throw new Error("年齡不是一個(gè)正整數(shù)"); age = age; } PersonCount++; if (PersonCount > 50) throw new Error("一個(gè)只能創(chuàng)建50個(gè)人"); this.setName(name); this.setAge(age); } })(); //測試靜態(tài)變量 /* var Persons = []; for (var i = 0; i < 51; i++) { Persons[i] = new Person(i, i + 1); console.log("name:" + Persons[i].getName() + "age:" + Persons[i].getName()); } //*/ //測試封裝效果 /* var Test = new Person("111", "1"); console.log(Test.name); //*/ //測試靜態(tài)函數(shù)checkage //var TestAge =new Person("111","asd");
主要參考《javascript設(shè)計(jì)模式》的例子
總結(jié)可以看到這樣實(shí)現(xiàn)了封裝效果。不過對于私有函數(shù)的測試。只能通過測試接口的用例囊括才能實(shí)現(xiàn)。對于測試的要求可能就變高了。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/79342.html
摘要:對象會(huì)記住它的原型給對象提供了一個(gè)名為的隱藏屬性,某個(gè)對象的屬性默認(rèn)會(huì)指向它的構(gòu)造器的原型對象,即。我們通過代碼來驗(yàn)證再來實(shí)際上,就是對象跟對象構(gòu)造器的原型聯(lián)系起來的紐帶切記這句話,對未來理解原型鏈很有幫助。 封裝 封裝數(shù)據(jù) 在許多語言的對象系統(tǒng)中,封裝數(shù)據(jù)是由語法解析來實(shí)現(xiàn)的,這些語言也許提供了 private、public、protected 等關(guān)鍵字來提供不同的訪問權(quán)限。例如:j...
摘要:創(chuàng)建對象中,創(chuàng)建對象的基本模式有三種。因此,在設(shè)計(jì)構(gòu)造函數(shù)時(shí),需要進(jìn)行慎重考慮。因此在中,這種問題被稱作繼承破壞封裝。靜態(tài)成員每個(gè)只有一份,直接通過類對象進(jìn)行訪問。 什么是封裝 找工作時(shí)一些公司給了offer后我就想知道真正拿到手的是多少,畢竟賦稅繁重。但各種稅也好,五險(xiǎn)一金也好我實(shí)在是弄不清楚,于是我就會(huì)在網(wǎng)上的一些稅后收入計(jì)算器上進(jìn)行計(jì)算,只需要填寫一些基本信息,比如稅前收入,所...
摘要:屬性是一個(gè)值或一組值以數(shù)組或?qū)ο蟮男问?,是對象的成員。可以使用內(nèi)置構(gòu)造函數(shù)和創(chuàng)建包裝對象。因此下面的代碼將會(huì)使人很迷惑結(jié)果結(jié)果,此數(shù)組長度為應(yīng)該盡量避免使用數(shù)組構(gòu)造函數(shù)創(chuàng)建新數(shù)組。給數(shù)組對象添加返回?cái)?shù)組中最大元素值的方法。 對象部分 Object類型 Object 是一個(gè)無序的集合,可以存放任意類型對象,所有其他對象都繼承自這個(gè)對象。創(chuàng)建Object類型有兩種,一種是使用new運(yùn)算符,...
摘要:繼承性子標(biāo)簽會(huì)繼承父標(biāo)簽樣式優(yōu)先級(jí)行內(nèi)樣式選擇器類選擇器標(biāo)簽選擇器通配符繼承機(jī)制創(chuàng)建了的元素中,在垂直方向上的會(huì)發(fā)生重疊。 技能考察: 一、關(guān)于Html 1、html語義化標(biāo)簽的理解; 結(jié)構(gòu)化的理解; 能否寫出簡潔的html結(jié)構(gòu); SEO優(yōu)化 a、理解:根據(jù)內(nèi)容的結(jié)構(gòu)化(內(nèi)容語義化),選擇合適的標(biāo)簽(代碼語義化)便于開發(fā)者閱讀和寫出更優(yōu)雅的代碼的同時(shí) 讓瀏覽器的爬蟲和...
摘要:繼承性子標(biāo)簽會(huì)繼承父標(biāo)簽樣式優(yōu)先級(jí)行內(nèi)樣式選擇器類選擇器標(biāo)簽選擇器通配符繼承機(jī)制創(chuàng)建了的元素中,在垂直方向上的會(huì)發(fā)生重疊。 技能考察: 一、關(guān)于Html 1、html語義化標(biāo)簽的理解; 結(jié)構(gòu)化的理解; 能否寫出簡潔的html結(jié)構(gòu); SEO優(yōu)化 a、理解:根據(jù)內(nèi)容的結(jié)構(gòu)化(內(nèi)容語義化),選擇合適的標(biāo)簽(代碼語義化)便于開發(fā)者閱讀和寫出更優(yōu)雅的代碼的同時(shí) 讓瀏覽器的爬蟲和...
閱讀 2444·2021-09-22 15:41
閱讀 1457·2021-08-19 10:54
閱讀 1768·2019-08-23 15:11
閱讀 3407·2019-08-23 10:23
閱讀 1434·2019-08-22 16:28
閱讀 804·2019-08-22 15:11
閱讀 746·2019-08-22 14:53
閱讀 720·2019-08-22 13:49