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

首頁 > 編程 > JavaScript > 正文

(Javascript)prototype的一個優勢也是缺點

2019-11-17 04:48:01
字體:
來源:轉載
供稿:網友
如何在javascript實現OO編程?恐怕最好的方式就是充分利用PRototype屬性。關于prototype的介紹有很多,我就不贅述了。比較基本的原理是,當你用prototype編寫一個類后,當你new一個新的object,瀏覽器會自動把prototype中的內容替你附加在object上。這樣,通過利用prototype,你也就實現了類似OO的Javascript。在Javascript中,object就是一個associative array。一個function就是一個類。當你編寫如下function時,其實就是定義了一個類,該function就是它的構造函數。
function MyObject(name, size)       {              this.name = name;              this.size = size;       }
之后,你可以方便的通過MyObject類的prototype屬性來方便的擴充它。比如,你可以給他添加其他的屬性和方法。
       MyObject.prototype.tellSize = function()
       {              return "size of "+this.name+" is "+this.size;       }              MyObject.prototype.color = "red";       MyObject.prototype.tellColor = function()       {              return "color of "+this.name+" is "+this.color;       }              var myobj1 = new MyObject("tiddles", "7.5 meters");
       domDiv.innerHtml += myobj1.tellColor()+"<br /><br />";
你可以想象,當你調用tellColor()方法后,結果是這樣的:
color of tiddles is red
很方便的是,prototype屬性可以動態添加。比如,你需要往MyObject中加入一個height屬性,并希望其提供一個tellHeight()方法來獲得height屬性的值。你可以在上面的代碼后,繼續添加如下的代碼:
       MyObject.prototype.height = "2.26 meters";       MyObject.prototype.tellHeight = function()       {              return "height of "+this.name+" is "+this.height;       }
之后,你可以訪問一下myobj1的tellHeight()方法,你可以得到如下的結果:
height of tiddles is 2.26 meters
prototype的這些動態的特性看起來有些迷人,不過我倒是反而覺得有些涼颼颼的。確實,這些特性給你很大的靈活性,可以給與你runtime改變類屬性和方法的能力。不過,稍微發掘一下,會有些不良的習慣產生。首先,假如可以動態添加屬性和方法,那么很輕易讓人想到,當我調用時,我想要調用的屬性或者方法存在不?這是一個很嚴厲的問題,假如當我們調用時根本沒有該屬性或者方法,將可能導致我們的腳本down掉。不過也有解決辦法。比如,在上面的代碼中,當還沒有tellHeight()方法時,我們可以如下編寫代碼避免發生錯誤:
       if (myobj1.tellHeight)       {              domDiv.innerHTML += myobj1.tellHeight()+"<br /><br />";       }
注重,一定要在if語句中,不要加方法后面的那對(),否則,直接就down掉了。有愛好的讀者可以打印一下,看看分別訪問myobj1.tellHeight和myobj1.tellHeight()時有什么區別。也許,你覺得這個是小意思。加個判定嘛,不就好了?對,但是下面一個問題更令人頭痛。屬性和方法在不在的問題簡單,可是屬性和方法變不變化的問題可就嚴重了。在不在我們可以檢測,變不變呢?比如,請看下面的代碼:

       function MyObject(name, size)       {              this.name = name;              this.size = size;       }              MyObject.prototype.color = "red";       MyObject.prototype.tellColor = function()       {              return "color of "+this.name+" is "+this.color;
       }              var myobj1 = new MyObject("tiddles", "7.5 meters");       domDiv.innerHTML += myobj1.tellColor()+"<br /><br />";              MyObject.prototype.color = "green";              domDiv.innerHTML += myobj1.tellColor()+"<br /><br />";
該代碼將產生如下結果:
color of tiddles is red
color of tiddles is green
請注重,你修改的是類MyObject的color屬性。但是你驚異的看到你之前實例化的對象myobj1的屬性值竟然也變化了。天!假如你的項目代碼是多人合作,那么,也許某個人會在編程時為了圖一己之便,擅自修改你的類。于是,所有人的對象都變化了。于是,你們陷入了漫長的debug過程中。。。。。。(不要說我沒有告訴你啊)
上面是屬性,還有方法:
       function MyObject(name, size)       {              this.name = name;              this.size = size;       }              MyObject.prototype.color = "red";       MyObject.prototype.tellColor = function()       {              return "color of "+this.name+" is "+this.color;
       }              var myobj1 = new MyObject("tiddles", "7.5 meters");       domDiv.innerHTML += myobj1.tellColor()+"<br /><br />";              MyObject.prototype.color = "green";       MyObject.prototype.tellColor = function()       {              return "your color of "+this.name+" is "+this.color;       }
              domDiv.innerHTML += myobj1.tellColor()+"<br /><br />";
這段代碼的結果是:
color of tiddles is red
your color of tiddles is green
哈?原來方法也能變,汗!問題來了。Javascript太靈活的編程方式多少讓人不適應。假如整個Team的水平都比較高還可以,沒人會犯這樣的錯誤。但是,當有個毛頭小伙子不知情,擅自修改類,將導致所有的人的對象都發生變化,無論是屬性還是方法。在Javascript代碼變得越來越多的Ajax時代,這是一個嚴重的問題。這說明,編寫Javascript時,好的編程風格更加重要。記得某人曾經說過這樣的話,想Java和C#這些比較嚴格的語言,雖然降低了靈活性,但也減少了犯錯誤的可能。這樣,即使一個新手,他寫出的代碼也不會與高手差太多。但是,像Javascript這樣的腳本語言,由于太靈活,所以,高手寫出的是天使,而新手寫的,可能是魔鬼!CoofUCoo Zhang4/23/2006

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
大胆人体色综合| 欧美小视频在线观看| 国产综合视频在线观看| 亚洲第一中文字幕在线观看| 亚洲成人中文字幕| 日韩中文字幕在线播放| 色婷婷av一区二区三区久久| 亚洲区中文字幕| 国产一区二区三区毛片| 亚洲日韩欧美视频| 亚洲天堂免费观看| 中文字幕亚洲欧美| 亚洲大胆人体视频| 最近2019中文字幕第三页视频| 欧美最猛性xxxxx免费| www.欧美三级电影.com| 国产精品丝袜白浆摸在线| 综合网日日天干夜夜久久| 久久久欧美精品| 国产精品视频白浆免费视频| 91精品国产自产在线老师啪| 日韩av理论片| 亚洲美女av网站| 国产suv精品一区二区三区88区| 亚洲福利小视频| 91亚洲一区精品| 国产精品久久久久久久久影视| 日韩精品视频中文在线观看| 国产精欧美一区二区三区| 精品国产电影一区| 国语自产精品视频在免费| 久久久久国产视频| 亚洲免费高清视频| 国产视频福利一区| 亚洲精品成人免费| 97视频国产在线| 亚洲加勒比久久88色综合| 亚洲a级在线播放观看| 亚洲欧美激情精品一区二区| 欧美巨猛xxxx猛交黑人97人| 国产成人一区二区三区小说| 欧洲成人免费视频| 欧美性xxxxxxx| 亚洲成人动漫在线播放| 亚洲人成网站色ww在线| 成人淫片在线看| 久久成人综合视频| 国产精品一区久久久| 在线观看免费高清视频97| 国内精品免费午夜毛片| 国产精品福利观看| 亚洲视频一区二区三区| 精品国产91久久久久久老师| 欧美精品一本久久男人的天堂| 爽爽爽爽爽爽爽成人免费观看| 成人激情综合网| www日韩欧美| 久久精品视频中文字幕| 在线免费观看羞羞视频一区二区| 久久久久九九九九| 欧美日韩国产91| 欧美性猛交xxxx黑人| 欧美国产亚洲视频| 日韩在线资源网| 欧美日韩精品中文字幕| 久久精品国产一区| 国产精品色婷婷视频| 亚洲欧美综合另类中字| 欧美一级淫片播放口| 欧美xxxx做受欧美.88| 在线观看日韩专区| 久久久国产精品免费| 久热精品视频在线观看一区| 国产精品最新在线观看| 欧美成人午夜影院| 欧美高清videos高潮hd| 亚洲精品日产aⅴ| 欧美精品情趣视频| 4p变态网欧美系列| 久久久亚洲影院| 成人国产精品久久久久久亚洲| 日本免费在线精品| 一区二区欧美日韩视频| 欧美一级在线亚洲天堂| 国产精品久久久久久久久借妻| 在线国产精品视频| 欧美黄色性视频| 国产精品久久久久久久久免费| 欧美精品videofree1080p| 高潮白浆女日韩av免费看| 亚洲国产日韩欧美在线图片| 日韩美女中文字幕| 亚洲国产高清高潮精品美女| 91chinesevideo永久地址| 亚洲国产黄色片| 日本高清不卡的在线| 国产主播欧美精品| 欧美一区二三区| 久久久久久久国产精品| 久久久久久久久久久久久久久久久久av| 色一区av在线| 性欧美xxxx视频在线观看| 国产精品免费看久久久香蕉| 91日韩在线播放| 国产精品入口福利| 亚洲成人动漫在线播放| 欧美视频在线视频| 中文字幕亚洲精品| 国产精品久久久久久久av大片| 亚洲人成人99网站| 欧美在线亚洲一区| 日韩av中文字幕在线| 自拍偷拍亚洲精品| 一二美女精品欧洲| 欧美午夜电影在线| 欧美一级大胆视频| 精品露脸国产偷人在视频| 亚洲一区二区三区香蕉| 国产一区二区成人| 91久久在线观看| 国产精品亚洲欧美导航| 91国内揄拍国内精品对白| 视频一区视频二区国产精品| 欧美福利视频在线| 九九热精品视频在线播放| 欧美日韩福利在线观看| 俺去亚洲欧洲欧美日韩| 国产精品久久综合av爱欲tv| 91久久久久久久久久久| 国产精品美女无圣光视频| 亚洲国产日韩欧美在线99| 久久天天躁狠狠躁老女人| 亚洲国产小视频| 91麻豆桃色免费看| 国色天香2019中文字幕在线观看| 黑人巨大精品欧美一区免费视频| 91精品国产亚洲| 操91在线视频| 欧美电影在线播放| 欧美在线视频在线播放完整版免费观看| 国产精品免费久久久久久| 日韩经典中文字幕在线观看| 亚洲片在线观看| 在线观看国产欧美| 色综合天天综合网国产成人网| 91极品女神在线| 操人视频在线观看欧美| 国产精品扒开腿做爽爽爽的视频| 欧美黑人一区二区三区| 亚洲欧洲成视频免费观看| 亚洲人成电影网站色www| 欧美视频在线视频| 午夜精品久久久99热福利| 国产成人精品一区二区三区| 2019av中文字幕| 中文字幕无线精品亚洲乱码一区| 国内精品小视频| 国色天香2019中文字幕在线观看| 亚洲国内精品视频| 国产精品久久一| 亚洲成人av片在线观看| 欧美—级a级欧美特级ar全黄| 欧美激情网友自拍| 日韩欧美中文第一页|