成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Javascript面向?qū)ο缶幊?-- 設(shè)計(jì)模式

Cciradih / 2681人閱讀

摘要:組合構(gòu)造函數(shù)原型模式解決構(gòu)造傳參和共享問題,可以組合構(gòu)造函數(shù)原型模式不共享的使用構(gòu)造函數(shù)共享的使用原型模式強(qiáng)制指向這種模式也是最常見也是最常用的模式,這種混合模式很好的解決了傳參和引用共享的大難題。

寫在前面:

之前的文章都是寫構(gòu)造函數(shù),原型之類的。但是我們都知道原型最大的優(yōu)點(diǎn)也是缺點(diǎn)就是共享。也是我們最頭疼的問題.
據(jù)共享的緣故,導(dǎo)致很多開發(fā)者放棄使用原型,因?yàn)槊看螌?shí)例化出的數(shù)據(jù)需要保留自己的特性,而不能共享。

組合構(gòu)造函數(shù)+原型模式

解決構(gòu)造傳參和共享問題,可以組合構(gòu)造函數(shù)+原型模式

function Box(name, age) {         //不共享的使用構(gòu)造函數(shù)
this.name = name;
this.age = age;
this.fruits = ["apple", "banana", "orange"];
};
Box.prototype = {                   //共享的使用原型模式
    constructor: Box,               //強(qiáng)制指向Box
    run: function() {
    return this.name + this.age + this.fruits;
        }
}

PS:這種模式也是最常見也是最常用的模式,這種混合模式很好的解決了傳參和引用共享的大難題。 是創(chuàng)建對象比較好的方法。

動(dòng)態(tài)原型模式

原型模式, 不管你是否調(diào)用了原型中的共享方法, 它都會(huì)初始化原型中的方法, 并且在
聲明一個(gè)對象時(shí), 構(gòu)造函數(shù)+原型部分讓人感覺又很怪異, 最好就是把構(gòu)造函數(shù)和原型封裝
到一起。為了解決這個(gè)問題,我們可以使用動(dòng)態(tài)原型模式

動(dòng)態(tài)原型模式:

function Box(name ,age) {                 //將所有信息封裝到函數(shù)體內(nèi)
this.name = name;
this.age = age;
if (typeof this.run != "function") {     //僅在第一次調(diào)用的初始化
Box.prototype.run= function() {
return this.name;
  };
 }
}
var box = newBox("Lee", 3);
alert(box.run())

第一次調(diào)用構(gòu)造函數(shù)時(shí), run()方法發(fā)現(xiàn)不存在,然后初始化原型。當(dāng)?shù)诙握{(diào)用,就不會(huì)初始化, 并且第二次創(chuàng)建新對象, 原型也不會(huì)再初始化了。 這樣及得到了封裝, 又實(shí)現(xiàn)了原型方法共享,并且屬性都保持獨(dú)立.

注意:使用動(dòng)態(tài)原型模式,千萬不能使用字面量的方式重寫原型,因?yàn)樗鼤?huì)切斷實(shí)例與新原型之間的聯(lián)系?。?!

這是Javascript OOP里面的其中兩種設(shè)計(jì)模式,下一篇文章會(huì)講寄生構(gòu)造函數(shù)模式和穩(wěn)妥構(gòu)造函數(shù)模式。
還有最頭疼的繼承!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/88287.html

相關(guān)文章

  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對象”還好嗎?

    摘要:很多情況下,通常一個(gè)人類,即創(chuàng)建了一個(gè)具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍(lán)圖或原型。在中,對象通過對類的實(shí)體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實(shí)例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    李昌杰 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對象”還好嗎?

    摘要:很多情況下,通常一個(gè)人類,即創(chuàng)建了一個(gè)具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍(lán)圖或原型。在中,對象通過對類的實(shí)體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實(shí)例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    Lyux 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對象”還好嗎?

    摘要:很多情況下,通常一個(gè)人類,即創(chuàng)建了一個(gè)具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍(lán)圖或原型。在中,對象通過對類的實(shí)體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實(shí)例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    AaronYuan 評論0 收藏0
  • JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐 | 01 - 面向對象JavaScript

    摘要:在中,并沒有對抽象類和接口的支持。例如,當(dāng)對象需要對象的能力時(shí),可以有選擇地把對象的構(gòu)造器的原型指向?qū)ο螅瑥亩_(dá)到繼承的效果。本節(jié)內(nèi)容為設(shè)計(jì)模式與開發(fā)實(shí)踐第一章筆記。 動(dòng)態(tài)類型語言 編程語言按數(shù)據(jù)類型大體可以分為兩類:靜態(tài)類型語言與動(dòng)態(tài)類型語言。 靜態(tài)類型語言在編譯時(shí)已確定變量類型,動(dòng)態(tài)類型語言的變量類型要到程序運(yùn)行時(shí),待變量被賦值后,才具有某種類型。 而JavaScript是一門典型...

    suxier 評論0 收藏0
  • JavaScript面向對象編程——面向對象

    摘要:面向?qū)ο竺嫦驅(qū)ο蟮母攀雒嫦驅(qū)ο笫鞘裁疵嫦驅(qū)ο缶幊痰娜Q是,簡稱。面向?qū)ο缶幊淌怯贸橄蠓绞絼?chuàng)建基于現(xiàn)實(shí)世界模型的一種編程。面向?qū)ο缶幊炭梢钥醋鍪鞘褂靡幌盗袑ο笙嗷f(xié)作的軟件設(shè)計(jì)。面向?qū)ο缶幊痰纳礁柚饕奶卣魇欠庋b繼承多態(tài)。 面向?qū)ο?面向?qū)ο蟮母攀?面向?qū)ο笫鞘裁?面向?qū)ο缶幊痰娜Q是Object Oriented Programming,簡稱OOP。面向?qū)ο缶幊淌怯贸橄蠓绞絼?chuàng)建基于現(xiàn)實(shí)...

    SimonMa 評論0 收藏0
  • 學(xué)Java編程需要注意的地方

    摘要:學(xué)編程真的不是一件容易的事不管你多喜歡或是多會(huì)編程,在學(xué)習(xí)和解決問題上總會(huì)碰到障礙。熟練掌握核心內(nèi)容,特別是和多線程初步具備面向?qū)ο笤O(shè)計(jì)和編程的能力掌握基本的優(yōu)化策略。   學(xué)Java編程真的不是一件容易的事,不管你多喜歡或是多會(huì)Java編程,在學(xué)習(xí)和解決問題上總會(huì)碰到障礙。工作的時(shí)間越久就越能明白這個(gè)道理。不過這倒是一個(gè)讓人進(jìn)步的機(jī)會(huì),因?yàn)槟阋恢辈粩嗟膶W(xué)習(xí)才能很好的解決你面前的難題...

    leanxi 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<