雪山飛狐

          雪山飛狐

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            1 Posts :: 2 Stories :: 0 Comments :: 0 Trackbacks

          Prototype.js作為 javascript的成功的開源框架,封裝了很多好用的功能,雖然官方?jīng)]提供什么文檔,不過(guò)在google上一搜,好多相 關(guān)的文檔,不過(guò)在學(xué)習(xí)使用的過(guò)程中還是碰到了一些問(wèn)題,希望熟悉的朋友能多加指點(diǎn),對(duì)于prototype.js學(xué)習(xí)我關(guān)注這么幾點(diǎn),同時(shí)針對(duì)每點(diǎn)也講講 學(xué)習(xí)的結(jié)果和碰到的問(wèn)題,^_^
          1、類的創(chuàng)建
                prototype.js已經(jīng)封裝好了,這個(gè)很簡(jiǎn)單。

          var Person=Class.create();
                這樣就創(chuàng)建了一個(gè)Person類,這個(gè)Person類必須提供initialize方法的實(shí)現(xiàn):
          Person.prototype={
                           initialize:
          function(){
                           }

                }
          ;
                對(duì)比java,Class.create相當(dāng)于Class.forName(),initialize相當(dāng)于構(gòu)造器,和java的構(gòu)造器一樣,可以自定義 為帶參數(shù)性質(zhì)的。
                可以看到在使用這樣的方式定義class后,它和javascript原來(lái)的通過(guò)function方式來(lái)定義一個(gè)類就有明確的區(qū)分了,在這種情況下我們就 可以用Class.create來(lái)定義類,用function來(lái)直接定義函數(shù)。
                類通常還涉及靜態(tài)成員(static性質(zhì)的)和實(shí)例成員(需要實(shí)例化才可調(diào)用)的定義。
                在javascript中這點(diǎn)也非常容易:
                靜態(tài)成員:  
          var Person={
                          name:'person',
                          getName:
          function(){return 'person'}
                }
          ;
                實(shí)例成員:    
          Person.prototype={
                         childname:'child',
                         eat:
          function()
                }
                上 面的Person.getName是可以直接這么調(diào)用 的,但eat方法則需通過(guò)var person=new Person();person.eat();的方式來(lái)調(diào)用。
          2、類的繼承
                類的繼承其實(shí)javascript本身就支持的,不過(guò)prototype提供了一種另外的方法。
                按照javascript的支持的實(shí)現(xiàn):
          var Student=Class.create();
                Student.prototype
          =new Person();
                這樣就實(shí)現(xiàn)了Student繼承至Person。
                在使用prototype的情況下可以這么實(shí)現(xiàn):
                var Student=Class.create();
                Object.extend(Student.prototype,Person.prototype);
                子類要增加方法時(shí)可使用 
          Student.prototype.study=function(){};
                或 
          Object.extend(Student.prototype,{
                                                                             study:
          function(){}
                                                                    }
          );
          3、事件機(jī)制(對(duì)類方法執(zhí)行的監(jiān)聽和觀察)
                在事件機(jī)制上則碰到了一些疑惑,作為事件機(jī)制主要需要提供事件的定義,對(duì)于事件的監(jiān)聽以及對(duì)于事件的觀察。
                在javascript中事件需要以on開頭,也就是作為事件就需要采用onclick這樣類似的命名:
                對(duì)上面的Student增加一個(gè)對(duì)外的事件,如:    
          Student.prototype.study=function(){
                       
          this.onstudy();
                }

                Student.prototype.onstudy
          =function(){};
                這個(gè)onstudy就是交給相應(yīng)的實(shí)例去實(shí)現(xiàn)的,例如實(shí)例采用這樣的方式: 
                function studyThis(){
                    alert(
          "study this");
                }

                
          var student=new Student();
                student.onstudy
          =studyThis();
                對(duì)于事件通常都希望進(jìn)行監(jiān)聽和觀察,根據(jù)prototype提供的bindAsEventListener以及Observe,這么進(jìn)行了嘗試:
          study.onstudy=watchStudy.bindAsEventListener(this);
                
          function watchStudy(event){
                      alert(
          "watch study");
                }
                按照事件 機(jī)制來(lái)說(shuō),在執(zhí)行study的時(shí)候應(yīng)該可以看到study this和watch study兩個(gè)提示,但最后執(zhí)行后只能看到watch study的提示,這是為什么呢?按照l(shuí)istener的概念的話,不應(yīng)該覆蓋原有方法的,不過(guò)我看了一下prototype.js的源代碼,按照上面的 編寫方式確實(shí)會(huì)照成覆蓋原方法。
                Observe是這么嘗試的:
                Event.observe(study,'study',watchStudy,false);
                按照觀察機(jī)制來(lái)說(shuō),應(yīng)該在執(zhí)行study的時(shí)候會(huì)看到兩個(gè)提示,但最后執(zhí)行后這行根本就沒(méi)起到任何作用。
                這是為什么呢?
          posted on 2010-04-20 19:38 犀利哥 閱讀(69) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 邯郸市| 临湘市| 漾濞| 稷山县| 巴里| 武邑县| 永寿县| 原阳县| 临洮县| 扎赉特旗| 安多县| 通州市| 江永县| 牟定县| 台江县| 麟游县| 酒泉市| 永昌县| 富民县| 平果县| 郑州市| 辉县市| 肥城市| 庆安县| 阳曲县| 罗甸县| 响水县| 渭南市| 北票市| 双江| 上犹县| 庆城县| 武夷山市| 游戏| 宁化县| 增城市| 腾冲县| 台中市| 江源县| 灌阳县| 襄樊市|