雪山飛狐

          雪山飛狐

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            1 Posts :: 2 Stories :: 0 Comments :: 0 Trackbacks

          Prototype.js作為 javascript的成功的開源框架,封裝了很多好用的功能,雖然官方沒提供什么文檔,不過在google上一搜,好多相 關的文檔,不過在學習使用的過程中還是碰到了一些問題,希望熟悉的朋友能多加指點,對于prototype.js學習我關注這么幾點,同時針對每點也講講 學習的結果和碰到的問題,^_^
          1、類的創建
                prototype.js已經封裝好了,這個很簡單。

          var Person=Class.create();
                這樣就創建了一個Person類,這個Person類必須提供initialize方法的實現:
          Person.prototype={
                           initialize:
          function(){
                           }

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

                Student.prototype.onstudy
          =function(){};
                這個onstudy就是交給相應的實例去實現的,例如實例采用這樣的方式: 
                function studyThis(){
                    alert(
          "study this");
                }

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

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 印江| 民丰县| 泾源县| 大同县| 宣化县| 石嘴山市| 蕉岭县| 西贡区| 七台河市| 修武县| 霍山县| 蓬莱市| 岳西县| 永定县| 沁水县| 甘孜| 黎平县| 镇安县| 囊谦县| 曲松县| 湖口县| 静乐县| 嘉义市| 云安县| 睢宁县| 罗甸县| 阿拉善盟| 会东县| 大同市| 通山县| 武威市| 禄劝| 磐安县| 应城市| 商南县| 鄯善县| 乐清市| 南昌市| 偃师市| 桦川县| 朝阳县|