淺學(xué)設(shè)計(jì)模式

待續(xù)http://www.cnblogs.com/ghostwu/p/7440691.html

總覺得我還沒有跨過這個(gè)坎挫酿,我得學(xué)好這個(gè)构眯。

工廠模式(最常看到的設(shè)計(jì)模式)

工廠模式的使用場(chǎng)合往往是要?jiǎng)?chuàng)建多個(gè)類似的對(duì)象早龟。

 function createObj(name){
        var obj = new Object();
        obj.name = name;
        obj.getName = function(){return obj.name};
        return obj;
 }
//使用方法
var obj1 = creatObj('Tony')

可以發(fā)現(xiàn)這種工廠模式產(chǎn)生的對(duì)象有著很大的局限性惫霸,不能設(shè)置和返回對(duì)象的類型。
為了讓創(chuàng)造出來的對(duì)象的類型也是可以獲取的葱弟,我們使用構(gòu)造函數(shù)的方法壹店。

function CreateObj(name){
    this.name = name;
    this.getName = function(){return this.name}
}
//利用的構(gòu)造函數(shù)建立實(shí)例的方法
var obj2=  new CreateObj('pony')

上述的構(gòu)造函數(shù)的方法和工廠模式最大的區(qū)別就在于新建實(shí)例的方法,構(gòu)造函數(shù)使用的是new這個(gè)關(guān)鍵字芝加。在new之后硅卢,會(huì)默認(rèn)創(chuàng)造一個(gè)this,最后都會(huì)return this藏杖。
使用new出的實(shí)例将塑,就可以用instanceof判斷它的類型了。


組合設(shè)計(jì)模式

用到組合設(shè)計(jì)模式之前蝌麸,我們先了解下為什么要使用這一種的設(shè)計(jì)模式点寥。它又是針對(duì)什么模式的改進(jìn)。
要設(shè)計(jì)大量的相似的對(duì)象来吩,首先其實(shí)想到的可以是繼承啊敢辩。對(duì)于JavaScript就可以用到原型鏈蔽莱,就可以用原型鏈繼承啊。

function object(o){
var G = function(){};
G.prototype = o;
return new G;
}
//realize inherit
var obj = {'name':'tony',show:function(){console.log(this.name)}}
var obj1 = object(obj)

但是如果對(duì)obj1中的name屬性就行修改的話戚长,可以發(fā)現(xiàn)obj的name屬相也會(huì)被修改盗冷,應(yīng)該原型鏈實(shí)現(xiàn)的是淺拷貝,引用類型的數(shù)據(jù)在共同的實(shí)例中共享历葛。
其中正塌,原型鏈繼承的方法在ES5中新增了一個(gè)Object.create()的方法。同樣也是淺拷貝恤溶。

寄生式繼承

function objCreate(srcObj){
var det = Object.create(sercObj);
return det
}

var obj1 = {name:'yippee'}
var obj2 = objCreate(obj1)

將原型鏈繼承再次封裝乓诽。
這樣實(shí)現(xiàn)就是一個(gè)數(shù)據(jù)不同享的繼承了。
但是又發(fā)現(xiàn)咒程,這個(gè)還是不完美的鸠天,不能傳參數(shù)。
那么帐姻,就可以引出組合繼承了稠集。
大三下就開始看這些了,這都不知道是第幾次復(fù)習(xí)了饥瓷。但是總是感覺理解的火候差點(diǎn)

//組合繼承
function Person( uName ){
            this.skills = [ 'php', 'javascript' ];
            this.userName = uName;
        }
        Person.prototype.showUserName = function(){
            return this.userName;
        }
        function Teacher ( uName ){
            Person.call( this, uName );
        }
        Teacher.prototype = new Person();

        var oT1 = new Teacher( 'ghostwu' );
        oT1.skills.push( 'linux' );
        var oT2 = new Teacher( 'ghostwu' );
        console.log( oT2.skills ); //php,javascript
        console.log( oT2.showUserName() ); //ghostwu

組合式繼承雖然在功能上大致的實(shí)現(xiàn)了我們的要求剥纷,但是在這種方法中調(diào)用了父類的構(gòu)造函數(shù)兩次,其中Persion.call(this.Uname)實(shí)例化對(duì)象的時(shí)候調(diào)用了一次呢铆,又在Teacher.prototype = new Person()設(shè)置子類原型的時(shí)候調(diào)用了一次晦鞋。

寄生組合式繼承

function Person(name){
  this,name  =  name;
 this.sex = 'male'
}

Persion.prototype.showName = function(){
  return this.name;
}

function Teacher(name){
  Person.call(this,name)
}

function inherit(sub,super){
  var tem = OBject.creat('super');
  tem . constructor  = super;
  sub.prototype  = tem;
}

這個(gè)也就是再對(duì)父類淺拷貝。

自我邏輯大調(diào)整棺克,每次寫完了之后悠垛,經(jīng)常過個(gè)幾天再去回想這一塊代碼邏輯的時(shí)候,總是會(huì)出現(xiàn)混淆娜谊。
搞忘了到底是用的function 還是對(duì)象确买,對(duì)function中的this的指向也就會(huì)出現(xiàn)問題。
在這重新梳理一下邏輯纱皆。
用的就是function湾趾,不然所有的原型鏈從何而來。
只是其中為什么用到了this派草,就是因?yàn)閚ew關(guān)鍵字撑帖。會(huì)自動(dòng)創(chuàng)建并且返回一個(gè)對(duì)象。
如果直接使用function澳眷,其中的this指向的是window。

這只是簡(jiǎn)單的了解了一下了思路蛉艾,然而在實(shí)際中的運(yùn)用還需要大量的練習(xí)

相關(guān)的練習(xí)的博客

學(xué)習(xí)內(nèi)容恐有錯(cuò)誤钳踊,日后若是有感觸重新改正

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末衷敌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子拓瞪,更是在濱河造成了極大的恐慌缴罗,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祭埂,死亡現(xiàn)場(chǎng)離奇詭異面氓,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蛆橡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門舌界,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人泰演,你說我怎么就攤上這事呻拌。” “怎么了睦焕?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵藐握,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我垃喊,道長(zhǎng)猾普,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任本谜,我火速辦了婚禮初家,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘耕突。我一直安慰自己笤成,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布眷茁。 她就那樣靜靜地躺著炕泳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪上祈。 梳的紋絲不亂的頭發(fā)上培遵,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音登刺,去河邊找鬼籽腕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛纸俭,可吹牛的內(nèi)容都是我干的皇耗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼揍很,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼郎楼!你這毒婦竟也來了万伤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤呜袁,失蹤者是張志新(化名)和其女友劉穎敌买,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阶界,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡虹钮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了膘融。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芙粱。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖托启,靈堂內(nèi)的尸體忽然破棺而出宅倒,到底是詐尸還是另有隱情,我是刑警寧澤屯耸,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布拐迁,位于F島的核電站,受9級(jí)特大地震影響疗绣,放射性物質(zhì)發(fā)生泄漏线召。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一多矮、第九天 我趴在偏房一處隱蔽的房頂上張望缓淹。 院中可真熱鬧,春花似錦塔逃、人聲如沸讯壶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)伏蚊。三九已至,卻和暖如春格粪,著一層夾襖步出監(jiān)牢的瞬間躏吊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工帐萎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留比伏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓疆导,卻偏偏與公主長(zhǎng)得像赁项,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容