摘要:閉包實現封裝類靜態變量靜態方法正整數私有屬性年齡不是一個正整數一個只能創建個人測試靜態變量測試封裝效果測試靜態函數主要參考設計模式的例子總結可以看到這樣實現了封裝效果。
什么是封裝
封裝就是把一個對象保護起來,使其只提供定義的接口方法,而保護私有的變量。打個比方,游戲中的一個人物對象,它的經驗只有通過打死怪獸這個接口方法來增加。如果可以直接修改經驗就會直接影響到整個游戲的設定。所以這個時候經驗這個屬性就是一個需要保護的變量。
封裝之利封裝保護了私有屬性,不用擔心這些屬性會被接口以外的方法以外的修改。更好的解耦。實現迪米特法則(最少知道原則)(Demeter Principle)
封裝之弊私有方法無法做單元測試,只能對共有方法做單元測試,單元測試用例的設計可能需要對共有方法的覆蓋增加保證覆蓋越多的私有方法。靈活性降低。對需要封裝的對象做很好的理解才能實現別人調用時候需要的接口可以被獲取。
閉包實現封裝類var Person = (function () { // 靜態變量 var PersonCount = 0; // 靜態方法 function checkage(age) { var r = /^+?[1-9][0-9]*$/; //正整數 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("年齡不是一個正整數"); age = age; } PersonCount++; if (PersonCount > 50) throw new Error("一個只能創建50個人"); this.setName(name); this.setAge(age); } })(); //測試靜態變量 /* 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); //*/ //測試靜態函數checkage //var TestAge =new Person("111","asd");
主要參考《javascript設計模式》的例子
總結可以看到這樣實現了封裝效果。不過對于私有函數的測試。只能通過測試接口的用例囊括才能實現。對于測試的要求可能就變高了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/79342.html
摘要:對象會記住它的原型給對象提供了一個名為的隱藏屬性,某個對象的屬性默認會指向它的構造器的原型對象,即。我們通過代碼來驗證再來實際上,就是對象跟對象構造器的原型聯系起來的紐帶切記這句話,對未來理解原型鏈很有幫助。 封裝 封裝數據 在許多語言的對象系統中,封裝數據是由語法解析來實現的,這些語言也許提供了 private、public、protected 等關鍵字來提供不同的訪問權限。例如:j...
摘要:創建對象中,創建對象的基本模式有三種。因此,在設計構造函數時,需要進行慎重考慮。因此在中,這種問題被稱作繼承破壞封裝。靜態成員每個只有一份,直接通過類對象進行訪問。 什么是封裝 找工作時一些公司給了offer后我就想知道真正拿到手的是多少,畢竟賦稅繁重。但各種稅也好,五險一金也好我實在是弄不清楚,于是我就會在網上的一些稅后收入計算器上進行計算,只需要填寫一些基本信息,比如稅前收入,所...
摘要:屬性是一個值或一組值以數組或對象的形式,是對象的成員。可以使用內置構造函數和創建包裝對象。因此下面的代碼將會使人很迷惑結果結果,此數組長度為應該盡量避免使用數組構造函數創建新數組。給數組對象添加返回數組中最大元素值的方法。 對象部分 Object類型 Object 是一個無序的集合,可以存放任意類型對象,所有其他對象都繼承自這個對象。創建Object類型有兩種,一種是使用new運算符,...
閱讀 2442·2021-09-22 15:41
閱讀 1455·2021-08-19 10:54
閱讀 1764·2019-08-23 15:11
閱讀 3405·2019-08-23 10:23
閱讀 1433·2019-08-22 16:28
閱讀 803·2019-08-22 15:11
閱讀 744·2019-08-22 14:53
閱讀 718·2019-08-22 13:49