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