亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JavaScript設計模式之工廠模式和構造器模式

2019-11-20 13:10:36
字體:
來源:轉載
供稿:網友

什么是模式

前陣子準備期末考試,勞神又傷身的,實在閑不得空來更新文章,今天和大家說說javascript中的設計模式。

首先呢,我們需要知道的是:模式是一種可復用的解決方案,而反模式呢就是針對某個問題的不良解決方案。

js反模式常見例子

1.向setTimeout和setInterval傳遞字符串,而不是函數,這會觸發eval()的內部使用。
2.在全局上下文中定義大量的變量污染全局命名空間
3.修改Object類的原型
4.以內聯形式使用js,嵌入在HTML文件中的js代碼是無法包含在外部單元測試工具中的。
5.濫用document.write,如果在頁面加載完成后執行docume.write,它會重寫我們所在的頁面,可以使用document.creatElement代替的話就盡量不用docume.write。

設計模式的類別

創建型設計模式

創建型設計模式專注于處理對象創建機制,以適合給定情況的方式來創建對象。屬于這個類別的屬性包括:

Constructor構造器、Factory工廠、Abstract抽象、Prototype原型、Singleton單例和Builder生成器

結構型設計模式

結構型模式與對象組合有關,通??梢杂糜谡页鲈诓煌瑢ο笾g建立關系的簡單方法。
屬于這個類別的模式包括:

Decorator裝飾者、Facade外觀、Flyweight享元、Adapter適配器和Proxy代理

行為設計模式

行為模式專注于改善或簡化系統中不同對象之間的通信。

行為模式包括:

Iterator迭代器、Mediator中介者、Observer觀察者和Visitor訪問者

Factory(工廠)模式

為了解決多個類似對象聲明的問題,我們可以使用一種叫做 工廠模式的方法,這種方法 就是為了解決實例化對象產生大量重復的問題。

復制代碼 代碼如下:

<script type="text/javascript">
    function createObject(name,age,profession){//集中實例化的函數
        var obj = new Object();
        obj.name = name;
        obj.age = age;
        obj.profession = profession;
        obj.move = function () {
            return this.name + ' at ' + this.age + ' engaged in ' + this.profession;
        };
        return obj;
    }
    var test1 = createObject('trigkit4',22,'programmer');//第一個實例
    var test2 = createObject('mike',25,'engineer');//第二個實例
    alert(test1.move());
    alert(test2.move());
</script>

工廠模式的分類

工廠模式分為簡單工廠、抽象工廠和智能工廠,工廠模式不顯示地要求使用一個構造函數。

簡單工廠模式:使用一個類(通常為單體)來生成實例。
復雜工廠模式:使用子類來決定一個成員變量應該是哪個具體的類的實例。

工廠模式之利

主要好處就是可以消除對象間的耦合,通過使用工程方法而不是new關鍵字。將所有實例化的代碼集中在一個位置防止代碼重復。
工廠模式之弊

大多數類最好使用new關鍵字和構造函數,可以讓代碼更加簡單易讀。而不必去查看工廠方法來知道。   
工廠模式解決了重復實例化的問題 ,但還有一個問題,那就是識別問題,因為根本無法 搞清楚他們到底是哪個對象的實例。

復制代碼 代碼如下:

alert(typeof test1); //Object
alert(test1 instanceof Object); //true

何時使用工廠模式?

Factory模式主要在以下場景使用:

1.當對象或組件涉及高復雜性時
2.當需要根據所在的不同環境輕松生成對象的不同實例時
3.當處理很多共享相同屬性的小型對象或組件時

Constructor(構造器)模式

ECMAScript 中可以采用構造函數(構造方法)可用來創建特定的對象。 該模式正好可以解決以上的工廠模式無法識別對象實例的問題。

復制代碼 代碼如下:

<script type="text/javascript">
    function Car(model,year,miles){//構造函數模式
        this.model = model;
        this.year = year;
        this.miles = miles;
        this.run = function () {
            return this.model + " has done " + this.miles + "miles";
        }
    }
    var Benz = new Car('Benz',2014,20000);
    var BMW = new Car("BMW",2013,12000);
    alert(Benz instanceof Car); //很清晰的識別他從屬于 Car,true

    console.log(Benz.run());
    console.log(BMW.run());
</script>

使用構造函數的方法 ,即解決了重復實例化的問題 ,又解決了對象識別的問題,該模式與工廠模式的不同之處在于:

1.構造函數方法沒有顯示的創建對象 (new Object());
2.直接將屬性和方法賦值給 this 對象;
3.沒有 renturn 語句。

構造函數的方法有一些規范:

1.函數名和實例化構造名相同且大寫, (PS:非強制,但這么寫有助于區分構造函數和 普通函數);
2.通過構造函數創建對象,必須使用 new 運算符。 
既然通過構造函數可以創建對象,那么這個對象是哪里來的, new Object()在什么地方執行了?執行的過程如下:

1.當使用了構造函數,并且 new 構造函數(),那么就后臺執行了 new Object();
2.將構造函數的作用域給新對象 ,(即 new Object()創建出的對象),而函數體內的 this 就 代表 new Object()出來的對象。
3.執行構造函數內的代碼;
4.返回新對象(后臺直接返回)。

帶原型的Constructor(構造器)

js中有一個名為prototype的屬性。調用js構造器創建一個對象后,新對象就會具有構造器原型的所有屬性。通過這種方式,可以創建多個Car對象,并訪問相同的原型。

復制代碼 代碼如下:

   <script type="text/javascript">
        function Car(model,year,miles) {
            this.model = model;
            this.year = year;
            this.miles = miles;
        }
        Car.prototype.run = function () {
            return this.model + " has done " + this.miles + " miles ";

        };
        var Benz = new Car('S350',2010,20000);
        var Ford = new Car('Ford',2012,12000);

        console.log(Benz.run());//"S350 has done 20000 miles "
        console.log(Ford.run());
    </script>


現在run()的單一實例就能夠在所有Car對象之間共享。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产女人aaa毛片在线| 岛国精品视频在线播放| 欧美午夜性色大片在线观看| 国产精品视频久久久| 91在线色戒在线| 91网在线免费观看| 成人免费看片视频| 日本精品视频在线观看| 久热精品视频在线观看| 国产午夜精品视频| 国外色69视频在线观看| 日本一区二区在线免费播放| 欧美日本精品在线| 欧美在线视频网站| 久久久久久av| 国产一区二中文字幕在线看| 久久精品国产96久久久香蕉| 亚洲天堂免费在线| 日韩免费在线免费观看| 少妇久久久久久| 美女撒尿一区二区三区| 日本在线精品视频| 国内精品久久久久影院 日本资源| 日韩av在线网站| 欧美精品videos性欧美| 7777精品视频| 国产精品女人久久久久久| 成人xxxx视频| 亚洲黄色片网站| 国语自产精品视频在线看| 日韩欧美在线视频观看| 日韩av黄色在线观看| 精品亚洲一区二区三区四区五区| 在线观看精品自拍私拍| 一区二区三区亚洲| 国产日韩欧美在线播放| 国产精品av免费在线观看| 欧美日韩国内自拍| 国内精品在线一区| 国产日韩欧美另类| 国产精品爱久久久久久久| 亚洲资源在线看| 91日韩在线视频| 精品成人国产在线观看男人呻吟| 另类天堂视频在线观看| 久久天堂电影网| 91欧美日韩一区| 国产精品第一视频| 亚洲国产精品久久91精品| 亚洲情综合五月天| 欧美午夜女人视频在线| 国产日韩欧美中文| 国内精品久久久久久| 精品久久久久久亚洲国产300| 久久久精品免费视频| 国产视频亚洲精品| 亚洲系列中文字幕| 亚洲国产精品字幕| 中文字幕亚洲综合久久| 欧亚精品中文字幕| 亚洲国产成人久久综合| 日韩在线观看免费高清完整版| 成人欧美在线视频| 日韩精品免费一线在线观看| 国产精品美女视频网站| 久久久999精品免费| 综合国产在线视频| 亚洲人午夜精品| 国产情人节一区| 精品亚洲aⅴ在线观看| 日本久久久a级免费| 午夜精品理论片| 国产久一一精品| 欧美激情在线狂野欧美精品| 最近更新的2019中文字幕| 久久躁日日躁aaaaxxxx| 亚洲国产精品成人一区二区| 国产欧美 在线欧美| 中文字幕欧美日韩va免费视频| 法国裸体一区二区| 日韩在线免费观看视频| 国产精品夫妻激情| 神马久久久久久| 在线精品国产成人综合| 日韩美女av在线| 国产精品在线看| 日韩精品欧美国产精品忘忧草| 日本高清视频一区| 国产精品久久久久久久久久尿| 97在线观看视频国产| 欧美在线影院在线视频| 欧美最顶级的aⅴ艳星| 欧美亚洲成人xxx| 日本在线观看天堂男亚洲| 中文字幕视频一区二区在线有码| 最近2019中文字幕mv免费看| 精品久久久免费| 国产精品永久免费| 色狠狠久久aa北条麻妃| 国产在线观看一区二区三区| 欧美高清理论片| 91在线视频九色| 久久久久成人精品| 米奇精品一区二区三区在线观看| 亚洲国产成人精品久久久国产成人一区| 国产精品久久久久久久久久尿| 国内外成人免费激情在线视频网站| 成人乱人伦精品视频在线观看| 亚洲毛片一区二区| 久久久久国产精品www| 国产精品久久久久一区二区| 91牛牛免费视频| 久久久久久av| 成人美女免费网站视频| 欧美黄色性视频| 色老头一区二区三区| 欧美激情国产高清| 欧美激情一二三| 国产在线精品自拍| 日韩免费电影在线观看| 国产精品青草久久久久福利99| 日日狠狠久久偷偷四色综合免费| 川上优av一区二区线观看| 国产在线日韩在线| 91久久精品视频| 亚洲网址你懂得| 欧美最猛性xxxxx免费| 中文字幕日韩有码| 精品视频www| 亚洲加勒比久久88色综合| 91久久精品国产91性色| 国产精品美女久久久久久免费| 亚洲网站在线观看| 亚洲a成v人在线观看| 亚洲电影在线观看| 午夜精品久久久久久久99热| 51视频国产精品一区二区| 欧美中文字幕在线观看| 久久久国产精品x99av| 欧美性猛交xxxx富婆| 欧美成人激情视频免费观看| 国产欧美一区二区三区在线| 亚洲精品视频久久| 2019中文字幕全在线观看| 成人激情视频免费在线| 国产精品美女无圣光视频| 国产精品视频网址| 国产精品福利在线观看网址| 九九久久国产精品| 欧美成人午夜激情在线| 久久久国产精品x99av| 亚洲视频免费一区| 丝袜情趣国产精品| 国产精品久久不能| 久久精品亚洲94久久精品| 91精品视频播放| 亚洲精品美女免费| 岛国av一区二区| 91超碰中文字幕久久精品| 欧美电影免费播放| 成人福利在线观看| 久久久成人的性感天堂| 色综合影院在线| 精品亚洲男同gayvideo网站|