Javascript面向?qū)ο缶幊?/h3>
[p]b.構(gòu)造函數(shù)方式:[br] 所謂構(gòu)造函數(shù)方式,就像我給出的例子"一個具體形象的例子",就是采用構(gòu)造函數(shù)的方式.它和工廠方式的區(qū)別是不再在函數(shù)內(nèi)部創(chuàng)建一個對象.而是通過this關(guān)鍵字指向當(dāng)前對象.[br] 構(gòu)造函數(shù)的例子不再給出.[br] 構(gòu)造函數(shù)和工廠方式一樣,會重復(fù)生成函數(shù),為每個版本的對象創(chuàng)建獨立的函數(shù)版本.[br] [br] c.原型方式[br] 所謂原型方式,就是利用prototype屬性來實現(xiàn)屬性和方法的繼承[br] eg.1[br] function people(){[br] }[br] [br] people.prototype.name="張三";[br] people.prototype.say=function(){[br] alert("我叫"+this.name);[br] };[br] [br] var zhangsan=new people();[br] var lisi=new people();[br] 原型方式不能通過構(gòu)造函數(shù)傳遞參數(shù)初始化屬性的值,因為所有的屬性和方法都是通過prototype添加的[br] [br] d.混合的構(gòu)造函數(shù)/原型方式[br] 對于對象的屬性,使用構(gòu)造函數(shù)的方式[br] 對于對象的方法,使用原型方式[br] eg.1[br] function people(name){[br] this.name=name;[br] }[br] people.prototype.say=function(){[br] return "我的名字叫"+this.name;[br] };[br] [br] var zhangsan=new people("張三");[br] document.write(zhangsan.say());[br] [br] eg.2 我們也可以把prototype寫入類,實現(xiàn)視覺上的封裝.[br] function people(name){[br] this.name=name;[br] people.prototype.say=function(){[br] return "我的名字叫"+this.name;[br] };[br] }[br] [br] var zhangsan=new people("張三");[br] document.write(zhangsan.say());[br] [br] 總結(jié):這種構(gòu)造類/對象的方法是推薦使用的[br] [br] e.動態(tài)原型方式[br] 這是在混合的構(gòu)造函數(shù)/原型方式上改進(jìn)的一種方式(提供更友好的編碼風(fēng)格),他們功能是等價的[br] eg.1[br] function people(name){[br] this.name=name;[br] if(typeof people._initialized=="undefined"){[br] people.prototype.say=function(){[br] return "我的名字叫"+this.name;[br] };[br] people._initialized=true;[br] }[br] }[br] var zhangsan=new people("張三");[br] document.write(zhangsan.say());[br] var lisi=new people("李四");[br] document.write(lisi.say());[br] 這樣處理的目的是創(chuàng)建對象的方法后下一次使用時不要再創(chuàng)建.[br] 由于上面的原因,動態(tài)原型方式也是javascript中常用的一種創(chuàng)建類/對象的一種方式[br] [br] f.混合工廠方式[br] 混合工廠方式幾乎和工廠方式是一樣的.它同樣是先構(gòu)造對象,然后再往對象中添加屬性和方法.不同的是,混合工廠方式生成對象時依舊使用new關(guān)鍵字.[br] eg.1[br] function people(){[br] var p_object=new object;[br] p_object.name="張三";[br] p_object.say=function(){[br] alert("我叫張三");[br] }[br] return p_object; //返回對象[br] }[br] var zhangsan=new people;[br] var lisi=new people;[br] zhangsan.say();[br] lisi.say();[br] 混合工廠方式和工廠方式以及經(jīng)典方式(構(gòu)造函數(shù),原型方式)一樣會產(chǎn)生問題,不推薦使用[br] [br] 對各種構(gòu)建類/對象方式的總結(jié):[br] 通常地,我們使用混合的構(gòu)造函數(shù)/原型方式,即屬性使用構(gòu)造函數(shù)方式,方法采用原型方式.當(dāng)然,加強(qiáng)地,我們可以使用動態(tài)原型方式.[br] 上面兩種方式是推薦使用的.[br] [br] [br]---->關(guān)于prototype的其他功能[br] 1.給對象(包括本地對象)添加新的方法[br] 比如array對象,你可能需要添加一個方法tohexstring,你可以這樣做:[br] array.prototype.tohexstring=function(){[br] //code here[br] }[br] 2.重定義方法[br] 實質(zhì)是讓方法指向一個新的函數(shù)[br] array.prototype.tohexstring=function(){[br] //other code href[br] }[/p] 該文章在 2010/7/14 1:40:00 編輯過 |
![]() |
admin
![]() 2010年7月14日 1:40 本文熱度 6149 |