<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    herodby
    技術(shù) 筆記
    posts - 14,  comments - 14,  trackbacks - 0
    ???? 工廠模式:
    ????? 初級(jí)開發(fā)者可能會(huì)這樣定義對(duì)象:
    ????? var? obj =? new Object();
    ?????? obj.name = "hero";
    ??????? obj.showName=function (){alert(this.name);}
    ????? 這里存在一個(gè)問(wèn)題就是如果我們要在多個(gè)地方用obj對(duì)象,可能在程序中類似的代碼要寫好多遍,于是產(chǎn)生了工廠方法
    ?????? function createObj()
    ?????? {
    ????????????var obj =? new Object();
    ??????????? obj.name="hero";
    ??????????? obj.showName=function (){alert(this.name);}
    ??????????? return obj;
    ????? }
    ????? var obj1 = createObj();
    ????? var obj2 = createObj();
    ???? 和另外一種方法 構(gòu)造函數(shù)法
    ?????? function obj (name)
    ?????? {
    ?????????????? this.name=name;
    ????????????? ?this.showName=?function (){alert(this.name);}
    ????????
    ?????? }

    ??
    ?把生成對(duì)象的代碼封裝起來(lái),避免出現(xiàn)重復(fù)new的代碼,當(dāng)然也可以進(jìn)一步改進(jìn),就是createObj傳遞一些參數(shù),而不是給obj賦默認(rèn)固定值:
    ??????????? function createObj(name)
    ?????? {
    ????????????var obj =? new Object();
    ??????????? obj.name=name;
    ??????????? obj.showName=function (){alert(this.name);}
    ??????????? return obj;
    ????? }
    ????? var obj1 = createObj("hero");
    ????? var o'b'j2=createObj("dby");
    但是存在一個(gè)問(wèn)題,就是我們每次調(diào)用createObj函數(shù)都會(huì)創(chuàng)建新的函數(shù) showName.意味著每個(gè)對(duì)象都有自己版本的showName,所以要改進(jìn)避開這個(gè)問(wèn)題.
    ??????? function showName()
    ?????? {
    ?????????????? alert(this.name)
    ??????? }
    ????????function createObj(name)
    ?????? {
    ????????????var obj =? new Object();
    ??????????? obj.name=name;
    ??????????? obj.showName=showName;
    ??????????? return obj;
    ????? }
    ????
    ???????這樣就解決了 重復(fù)創(chuàng)建函數(shù)的問(wèn)題, 哈哈哈,大功告成 ,親一個(gè).
    ?????
    ????? 原型方式:
    ??????????主要是利用對(duì)象的prototype屬性.
    ???????? function obj()
    ???????? {}
    ???????? obj.prototype.name="hero";
    ???????? obj.prototype.showName=function()
    ???????? {
    ???????????????alert(this.name);
    ???????? }
    ???????? 看起來(lái)似乎比剛才的工廠還完美,但是 有一個(gè)問(wèn)題,該函數(shù)沒(méi)有構(gòu)造函數(shù),屬性是通過(guò)prototype指定的,這一點(diǎn)在實(shí)際應(yīng)用中很讓人頭疼,所有的實(shí)例的屬性都一樣實(shí)在是不能讓人接受.尤其還存在一個(gè)安全隱患,那就是當(dāng)對(duì)象中有引用時(shí),例如???加上這樣一段
    obj.prototype.nameArray = new Array("hero","dby");
    ?????? 然后
    ????????? obj1 = new obj();
    ????????? obj2 = new obj();
    ????????? obj1.nameArray.push("lxw");
    ????????? 在obj2的nameArray中將也會(huì)看到這個(gè)屬性,因?yàn)閮蓚€(gè)對(duì)象的nameArray指向的是同一個(gè)引用.
    ?????????? 所以這種方式并不是理想方法.
    ????需要 改進(jìn)?
    ????? 結(jié)合構(gòu)造函數(shù),在構(gòu)造函數(shù)定義屬性,用原型定義方法
    ????? 例如
    ????? fuction obj(name)
    ????? {
    ???????????? this.name = name
    ???????????? this.nameArray =?new Array("hero","dby");
    ????? }
    ????? obj.prototype.showName = function(){alert(this.name)}
    所有的非函數(shù)屬性都在構(gòu)造函數(shù)里創(chuàng)建,函數(shù)屬性用prototype方式創(chuàng)建,obj1 中改變nameArray的值,不會(huì)影響到obj2對(duì)象的nameArray的值, 而且只有一個(gè)showName函數(shù),所以沒(méi)有內(nèi)存浪費(fèi).
    ??? 基本上完美了,剩下的基本都是一下其他的修飾了.有興趣的可以自己改著玩玩.
    ???? 筆者在這里加上一個(gè)單例 玩了一下:
    ???? function obj (name)
    ???? {
    ????????????this.name = name;
    ??????????? this.nameArray=new Array("hero","dby");
    ??????????? if(typeof? obj._initialized=='undefined')
    ????????????{
    ?????????????????????obj.prototype.showName=function(){alert(this.name);}
    ???????????????????? obj._initialized="true";
    ??????????? }
    ???? }??
    ?????其實(shí)不算是單例,? 只不過(guò)是在構(gòu)造對(duì)象的時(shí)候,先判斷一個(gè)屬性是否被定義,如果沒(méi)有定義,那么用原型方法繼續(xù)定義對(duì)象,如果已經(jīng)定義了屬性,那么就不在重復(fù)定義函數(shù)了. 該prototype方法只被創(chuàng)建一次,病賦值一次.
    ??? 又差不多完美了,大功告成? ,再親一個(gè).



    ?????
    ???
    ???????
    posted on 2006-11-27 17:26 鄧兵野 閱讀(10870) 評(píng)論(3)  編輯  收藏 所屬分類: javascript

    FeedBack:
    # re: javascript對(duì)象定義方法
    2008-09-28 16:46 | hellen
    好經(jīng)典  回復(fù)  更多評(píng)論
      
    # re: javascript對(duì)象定義方法
    2008-12-17 14:05 | SharpBoy
    麻煩
    給你看段更經(jīng)典的 :
    <script type=text/javascript>

    var myTest={};//定義空間
    myTest.showname=function(code){
    myTest.name="hello world ";
    }
    //以上過(guò)程相當(dāng)于定義了個(gè)空間和對(duì)應(yīng)空間內(nèi)方法和屬性,這所以經(jīng)典以后如果應(yīng)用屬性和方法,不會(huì)再構(gòu)建對(duì)象,而且在應(yīng)用對(duì)象時(shí)也很方便

    //不過(guò)有個(gè)相同問(wèn)題 這個(gè)只能類似面向?qū)ο笾械撵o態(tài) 相對(duì)于你優(yōu)點(diǎn)在于參數(shù)傳遞和引用方便
    alert(myTest.showname("second Test"));

    </script>  回復(fù)  更多評(píng)論
      
    # re: javascript對(duì)象定義方法
    2010-04-29 09:43 | 柔柔弱弱
    對(duì)反反復(fù)反復(fù)反復(fù)反復(fù)反復(fù)反復(fù)反復(fù)  回復(fù)  更多評(píng)論
      

    <2006年11月>
    2930311234
    567891011
    12131415161718
    19202122232425
    262728293012
    3456789

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲中字慕日产2021| 亚洲天堂视频在线观看| 亚洲熟妇久久精品| 91情侣在线精品国产免费| 亚洲xxxx视频| 免费人妻无码不卡中文字幕18禁| 国产成人亚洲精品91专区高清| 国产在线观看免费视频播放器| 农村寡妇一级毛片免费看视频 | 91网站免费观看| 久久精品国产亚洲AV忘忧草18| 亚洲w码欧洲s码免费 | 337P日本欧洲亚洲大胆精品| 夜色阁亚洲一区二区三区| a免费毛片在线播放| 亚洲精品成人网站在线观看 | 久久精品网站免费观看| 亚洲AV日韩AV永久无码色欲 | 亚洲AV无码乱码精品国产| 一区二区三区免费视频网站| 亚洲日韩精品无码专区网址| 久久久久成人精品免费播放动漫| 亚洲精品亚洲人成在线麻豆| 91视频国产免费| 一级一级一级毛片免费毛片| 亚洲国产天堂久久综合网站| 免费可以在线看A∨网站| 羞羞视频免费网站入口| 亚洲AV永久无码精品一百度影院| 成人免费激情视频| 免费无码婬片aaa直播表情| 婷婷精品国产亚洲AV麻豆不片| 久久WWW色情成人免费观看| 一本久久免费视频| 亚洲精品电影在线| 亚洲JIZZJIZZ中国少妇中文| 99国产精品免费视频观看| 国产成人亚洲毛片| 亚洲大片免费观看| 久久夜色精品国产亚洲av| 成人毛片免费在线观看|