<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
    ???? 工廠模式:
    ????? 初級開發(fā)者可能會這樣定義對象:
    ????? var? obj =? new Object();
    ?????? obj.name = "hero";
    ??????? obj.showName=function (){alert(this.name);}
    ????? 這里存在一個問題就是如果我們要在多個地方用obj對象,可能在程序中類似的代碼要寫好多遍,于是產(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);}
    ????????
    ?????? }

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



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

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

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

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

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

    <2010年4月>
    28293031123
    45678910
    11121314151617
    18192021222324
    2526272829301
    2345678

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲色无码专区一区| 国产成人va亚洲电影| 特级一级毛片免费看| 久久免费视频网站| 热99re久久精品精品免费| 亚洲国产精品无码中文字| 免费不卡视频一卡二卡| 免费一看一级毛片| 久久精品国产亚洲AV高清热| 亚洲av成人一区二区三区观看在线| 18禁在线无遮挡免费观看网站| 四虎成人免费网址在线| 亚洲AV无码一区二区二三区入口| 亚洲久热无码av中文字幕| 一级毛片免费视频| 免费A级毛片无码A| 亚洲一区二区三区亚瑟| 一级做α爱过程免费视频| 一级毛片免费全部播放| 全免费毛片在线播放| 国产亚洲精品精华液| 亚洲av中文无码乱人伦在线观看| 99久久精品毛片免费播放| 国产精品视频免费一区二区三区| 日产亚洲一区二区三区| 一级毛片免费在线播放| 免费看的一级毛片| 亚洲日本在线免费观看| 亚洲欧洲日本在线观看| 久久精品免费电影| 久久久久国产亚洲AV麻豆| 亚洲欧美国产国产一区二区三区| 一区二区三区福利视频免费观看| 亚洲精品国产综合久久一线| 亚洲午夜无码久久久久软件| 99国产精品免费观看视频| 中文字幕在线亚洲精品| 黄网站色成年片大免费高清| 久久午夜免费视频| 亚洲黄色在线观看网站| a级毛片免费高清毛片视频|