Javascript面向?qū)ο缶幊?/h3>
這是所有面向?qū)ο缶幊讨氨仨毰靼椎? 所謂類:簡單地說就是模板,說的專業(yè)一些,是一類具有某種性質(zhì)的物的集合.比如:人就是一個類,車也是一個類,等等. 所謂對象:就是類的具體實現(xiàn).如上面所說,人是一個類,一個具體的人就是一個對象,比如張三. 對象是類的實例化后的結(jié)果.javascript中使用new關(guān)鍵字來實例化一個類,生成一個對象. 例子: function people(){ //javascript中一個function也是一個類,這里我們建立一個空的類people } var zhangsan=new people; //實例化生成一個對象張三 ---->一個具體形象的例子 /*-->最簡單的類: *people類 * 屬性:性別,年齡,姓名 * 方法:說話 */ function people(name,sex,age){ this.name=name; this.sex=sex; this.age=age; this.say=function(){ return "我叫"+this.name; } } 使用時: var zhangsan=new people; alert(zhangsan.say()); var lisi=new people; alert(lizi.say()); 說明: 上面使用了this關(guān)鍵字,this總是指向當(dāng)前的對象,在上面例子中,zhangsan.say中具有this.name,這里的this是當(dāng)前的對象zhangsan.后面lisi.say則是指向當(dāng)前對象lisi 對象具有屬性,上面的name,sex和age就是對象的屬性.我們這樣可以訪問,如lisi.name,zhangsan.age 對象還具有方法,比如上面的say.方法是通過構(gòu)造函數(shù)實現(xiàn)的.使用時,如上面,用lisi.say(),zhangsan.say() 當(dāng)然我們還可以在實例化對象后為對象添加新的屬性和方法.比如: zhangsan.girlfriend="小麗"; zhangsan.doing=function(){ return "i am eating"; } ---->javascript類/對象和其他面向?qū)ο笳Z言的異同 相同點:面向?qū)ο缶幊痰乃枷攵际且粯拥?世界上所有的具體事物都可以看成對象,而這些事物從屬的集合都可以看成類.我們要做的是構(gòu)造我們需要的類,在實例化成我們需要的對象為我們工作. 不同點:其他面向?qū)ο缶幊痰恼Z言對于類/對象關(guān)心下面的事情: 1.作用域:公用,私用,受保護,靜態(tài).而javascript只有一種作用域:公用作用域. 2.特性:繼承,多態(tài).javascript不支持多態(tài),繼承方面的內(nèi)容將在"javascript對象的繼承"一文中介紹 ---->構(gòu)建javascript類/對象的方式 首先,可以大致定義出下面幾種類型: 1.工廠方式 2.構(gòu)造函數(shù)方式 3.原型方式 4.混合的構(gòu)造函數(shù)/原型方式 5.動態(tài)原型方法 6.混合工廠方式 具體說明: a.工廠方式: 所謂工廠方式,是指先建立對象,然后再往對象里面添加屬性和方法. eg.1 var zhangsan=new object; //創(chuàng)建對象 zhangsan.name="張三"; //給對象添加屬性 zhangsan.say=function(){ //給對象增加方法 alert("我叫張三"); } eg.2 上面的例子沒有封裝性,我們可以使用函數(shù)封裝,實現(xiàn)多重利用 function people(){ var p_object=new object; p_object.name="張三"; p_object.say=function(){ alert("我叫張三"); } return p_object; //返回對象 } var zhangsan=people; var lisi=people; 上面zhangsan和lisi兩個對象具有完全相同的屬性和方法,都叫"張三"(name屬性),都會說"我叫張三"(say()方法) eg.3 通過傳遞參數(shù)改進eg.2 function people(name){ var p_object=new object; p_object.name=name; p_object.say=function(){ alert("我叫"+this.name); } return p_object; //返回對象 } var zhangsan=people("張三"); var lisi=people("李四"); 總結(jié): 工廠方式,總是先創(chuàng)建一個對象,再往對象中添加你需要的屬性和方法.但這種做法對于封裝性和多種利用性不是很有利,這導(dǎo)致了這種對象的構(gòu)造方法不被提倡. 使用工廠方式總是為每個對象創(chuàng)建獨立的函數(shù)版本. 這類方式使用封裝然后調(diào)用新對象的時候不使用new創(chuàng)建對象. b.構(gòu)造函數(shù)方式: 該文章在 2010/7/14 1:40:00 編輯過 |
admin
2010年7月14日 1:40 本文熱度 5171 |