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

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

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

    javascript對象定義方法

    Posted on 2008-09-05 15:52 H2O 閱讀(251) 評論(0)  編輯  收藏 所屬分類: javascript
    工廠模式:
          初級開發(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)重復new的代碼,當然也可以進一步改進,就是createObj傳遞一些參數(shù),而不是給obj賦默認固定值:
                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,所以要改進避開這個問題.
            function showName()
           {
                   alert(this.name)
            }
            function createObj(name)
           {
                var obj =  new Object();
                obj.name=name;
                obj.showName=showName;
                return obj;
          }
        
           這樣就解決了 重復創(chuàng)建函數(shù)的問題, 哈哈哈,大功告成 ,親一個.
         
          原型方式:
              主要是利用對象的prototype屬性.
             function obj()
             {}
             obj.prototype.name="hero";
             obj.prototype.showName=function()
             {
                   alert(this.name);
             }
             看起來似乎比剛才的工廠還完美,但是 有一個問題,該函數(shù)沒有構(gòu)造函數(shù),屬性是通過prototype指定的,這一點在實際應用中很讓人頭疼,所有的實例的屬性都一樣實在是不能讓人接受.尤其還存在一個安全隱患,那就是當對象中有引用時,例如   加上這樣一段
    obj.prototype.nameArray = new Array("hero","dby");
           然后
              obj1 = new obj();
              obj2 = new obj();
              obj1.nameArray.push("lxw");
              在obj2的nameArray中將也會看到這個屬性,因為兩個對象的nameArray指向的是同一個引用.
               所以這種方式并不是理想方法.
        需要 改進 
          結(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)定義了屬性,那么就不在重復定義函數(shù)了. 該prototype方法只被創(chuàng)建一次,病賦值一次.

    posts - 0, comments - 21, trackbacks - 0, articles - 101

    Copyright © H2O

    主站蜘蛛池模板: 免费观看亚洲人成网站| 成年18网站免费视频网站| 国产成人亚洲综合网站不卡| 国产精品亚洲精品日韩动图| 久草视频在线免费| 国产三级电影免费观看| 中文字幕乱码亚洲精品一区| 在线a级毛片免费视频| 亚洲人妖女同在线播放| 男人天堂免费视频| 成在人线AV无码免费| 亚洲精品动漫免费二区| 免费一级做a爰片久久毛片潮喷| 国产精品亚洲一区二区三区| 亚洲А∨精品天堂在线| 国产黄色免费观看| 全免费a级毛片免费看不卡| 亚洲色欲色欱wwW在线| 老司机永久免费网站在线观看| 国产区图片区小说区亚洲区| 亚洲福利在线播放| 国产综合免费精品久久久 | 免费人成在线观看视频播放| 免费无码婬片aaa直播表情| 国产亚洲美女精品久久久2020| 97无码人妻福利免费公开在线视频| 久久国产亚洲观看| 青青草免费在线视频| 一区二区三区精品高清视频免费在线播放 | 亚洲精品美女久久777777| 老司机午夜精品视频在线观看免费| 亚洲精品在线视频| 免费女人高潮流视频在线观看 | 在线免费不卡视频| xxxx日本在线播放免费不卡| 国产精品亚洲片在线观看不卡| 亚洲日本在线免费观看| 国产亚洲美女精品久久久久| 久久精品夜色国产亚洲av| 毛片免费视频播放| jizz18免费视频|