Prototype.js學習

          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 2006-02-28 18:01 BlueDavy 閱讀(5651) 評論(4)  編輯  收藏 所屬分類: Javascript

          評論

          # 怎么開始使用propotype.js? 2006-04-10 16:40 tomcatlee

          <HTML>
          <HEAD>
          <TITLE> Test Page </TITLE>
          <script language="JavaScript" src="/js/prototype.js"></script>

          <script>
          function test1()
          {
          var d = $('myDiv');
          alert(d.innerHTML);
          }

          function test2()
          {
          var divs =$('myDiv','myOtherDiv');
          for(i=0; i<divs.length; i++)
          {
          alert(divs[i].innerHTML);
          }
          }
          </script>
          </HEAD>

          <BODY>
          <div id="myDiv">
          <p>This is a paragraph</p>

          </div>
          <div id="myOtherDiv">
          <p>This is another paragraph</p>
          </div>

          <input type="button" value=Test1 onclick="test1();"><br>
          <input type="button" value=Test2 onclick="test2();"><br>

          </BODY>
          </HTML>

          錯誤: $ is not defined
          源文件:http://localhost:8080/basetomcatproject/pages/html/propotypedemo.html
          行:15
          請指教阿
            回復  更多評論   

          # re: Prototype.js學習 2006-04-10 17:00 BlueDavy

          <script language="JavaScript" src="/js/prototype.js"></script>這里錯了,請確定你的js的路徑,可采用絕對路徑或相對路徑的方式來指定:
          絕對路徑:
          /basetomcat/project/js/prototype.js
          相對路徑:
          ../../js/prototype.js

          此時prototype.js放在basetomcatproject的js目錄下。  回復  更多評論   

          # re: Prototype.js學習 2006-04-17 09:44 金鈴

          根據我的了解 Event.observe(study,'study',watchStudy,false);
          不起作用,你可以試一下把var student=new Student();
          前面的var 去掉!
            回復  更多評論   

          # re: Prototype.js學習 2006-04-26 22:06 原創專欄 開源學習

          有錯誤.

          靜態成員: var Person={
          name:'person',
          getName:function(){return 'person'}
          }; 實例成員:
          Person.prototype={
          childname:'child',
          eat:function()
          } 上面的Person.getName是可以直接這么調用的,但eat方法則需通過var person=new Person();person.eat();的方式來調用。

          首先var Person={}; Person其實是個new Object(); 不是 function Person(){}

          希望你指實例成員是java里的含義.

          function Person(){};
          Person.prototype={
          childname:'child',
          eat:function()
          }
          var a=new Person();
          alert(a.childname);
          a.childname='aaa';
          alert(a.childname);
          alert(new Person();.childname);

            回復  更多評論   

          公告

           









          feedsky
          抓蝦
          google reader
          鮮果

          導航

          <2006年4月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          統計

          隨筆分類

          隨筆檔案

          文章檔案

          Blogger's

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 勃利县| 开远市| 遵化市| 彰武县| 上犹县| 长丰县| 句容市| 丹凤县| 峨边| 定陶县| 永新县| 崇左市| 翼城县| 朝阳县| 高淳县| 无极县| 乐都县| 儋州市| 奉化市| 邢台县| 宁南县| 缙云县| 商洛市| 遂平县| 额济纳旗| 类乌齐县| 惠州市| 布尔津县| 社旗县| 德格县| 巴林左旗| 保靖县| 迁安市| 南陵县| 从化市| 宜都市| 灵台县| 靖边县| 冀州市| 板桥市| 苏尼特左旗|