国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS 設(shè)計模式二(封裝)

SunZhaopeng / 955人閱讀

摘要:閉包實現(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

相關(guān)文章

  • javascript設(shè)計模式與開發(fā)實踐()- 封裝和原型模式

    摘要:對象會記住它的原型給對象提供了一個名為的隱藏屬性,某個對象的屬性默認會指向它的構(gòu)造器的原型對象,即。我們通過代碼來驗證再來實際上,就是對象跟對象構(gòu)造器的原型聯(lián)系起來的紐帶切記這句話,對未來理解原型鏈很有幫助。 封裝 封裝數(shù)據(jù) 在許多語言的對象系統(tǒng)中,封裝數(shù)據(jù)是由語法解析來實現(xiàn)的,這些語言也許提供了 private、public、protected 等關(guān)鍵字來提供不同的訪問權(quán)限。例如:j...

    luxixing 評論0 收藏0
  • Javascript 設(shè)計模式讀書筆記()——封裝,簡單的創(chuàng)建對象模式

    摘要:創(chuàng)建對象中,創(chuàng)建對象的基本模式有三種。因此,在設(shè)計構(gòu)造函數(shù)時,需要進行慎重考慮。因此在中,這種問題被稱作繼承破壞封裝。靜態(tài)成員每個只有一份,直接通過類對象進行訪問。 什么是封裝 找工作時一些公司給了offer后我就想知道真正拿到手的是多少,畢竟賦稅繁重。但各種稅也好,五險一金也好我實在是弄不清楚,于是我就會在網(wǎng)上的一些稅后收入計算器上進行計算,只需要填寫一些基本信息,比如稅前收入,所...

    lentrue 評論0 收藏0
  • JavaScript學(xué)習(xí)總結(jié)()數(shù)組和對象部分

    摘要:屬性是一個值或一組值以數(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運算符,...

    Lsnsh 評論0 收藏0
  • 前端知識歸納

    摘要:繼承性子標(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)雅的代碼的同時 讓瀏覽器的爬蟲和...

    sixleaves 評論0 收藏0
  • 前端知識歸納

    摘要:繼承性子標(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)雅的代碼的同時 讓瀏覽器的爬蟲和...

    NotFound 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<