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

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

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

    隨筆 - 14, 文章 - 39, 評(píng)論 - 17, 引用 - 0
    數(shù)據(jù)加載中……

    javascript對(duì)象定義方法 [轉(zhuǎn)]

    ???? 工廠模式:
    ????? 初級(jí)開(kāi)發(fā)者可能會(huì)這樣定義對(duì)象:
    ????? var? obj =? new Object();
    ?????? obj.name = "hero";
    ??????? obj.showName=function (){alert(this.name);}
    ????? 這里存在一個(gè)問(wèn)題就是如果我們要在多個(gè)地方用obj對(duì)象,可能在程序中類(lèi)似的代碼要寫(xiě)好多遍,于是產(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)避開(kāi)這個(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)建一次,病賦值一次.
    ??? 又差不多完美了,大功告成? .

    posted on 2006-12-08 00:42 mlw2000 閱讀(202) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): JavaScript

    主站蜘蛛池模板: 中文字幕亚洲乱码熟女一区二区| 久久亚洲AV成人无码电影| 国产精品免费久久| 久久精品国产亚洲av麻豆色欲 | 大片免费观看92在线视频线视频| 亚洲伊人色欲综合网| 亚洲性线免费观看视频成熟| 一区二区三区免费在线视频| 亚洲欧洲中文日产| 亚洲日韩国产成网在线观看| 国产男女爽爽爽爽爽免费视频| 草久免费在线观看网站| 亚洲国产理论片在线播放| 亚洲成年看片在线观看| 91手机看片国产永久免费| 久久99精品免费一区二区| 亚洲一级视频在线观看| 亚洲五月综合缴情在线观看| 国产精品自在自线免费观看| 曰批全过程免费视频播放网站| 免费一级毛suv好看的国产网站 | 伊人婷婷综合缴情亚洲五月| 免费av欧美国产在钱| 久久一区二区三区免费播放| 视频一区在线免费观看| 亚洲国产视频久久| 亚洲综合色丁香麻豆| 亚洲中文字幕日产乱码高清app| 免费观看美女裸体网站| 51精品视频免费国产专区| 伊人免费在线观看高清版| 黄网站色视频免费看无下截| 亚洲成在人线中文字幕| 亚洲精品高清视频| 亚洲午夜久久久久妓女影院| xvideos亚洲永久网址| 免费电视剧在线观看| 24小时日本韩国高清免费| 国产免费无码一区二区| 伊人免费在线观看| 中国内地毛片免费高清|