Prototype.js學(xué)習

          Prototype.js作為javascript的成功的開源框架,封裝了很多好用的功能,雖然官方?jīng)]提供什么文檔,不過在google上一搜,好多相關(guān)的文檔,不過在學(xué)習使用的過程中還是碰到了一些問題,希望熟悉的朋友能多加指點,對于prototype.js學(xué)習我關(guān)注這么幾點,同時針對每點也講講學(xué)習的結(jié)果和碰到的問題,^_^
          1、類的創(chuàng)建
                prototype.js已經(jīng)封裝好了,這個很簡單。
          var Person=Class.create();
                這樣就創(chuàng)建了一個Person類,這個Person類必須提供initialize方法的實現(xiàn):
          Person.prototype={
                           initialize:
          function(){
                           }

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

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

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

          posted on 2006-02-28 18:01 BlueDavy 閱讀(5652) 評論(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
          請指教阿
            回復(fù)  更多評論   

          # re: Prototype.js學(xué)習 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目錄下。  回復(fù)  更多評論   

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

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

          # re: Prototype.js學(xué)習 2006-04-26 22:06 原創(chuàng)專欄 開源學(xué)習

          有錯誤.

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

          首先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);

            回復(fù)  更多評論   

          公告

           









          feedsky
          抓蝦
          google reader
          鮮果

          導(dǎo)航

          <2006年2月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627281234
          567891011

          統(tǒng)計

          隨筆分類

          隨筆檔案

          文章檔案

          Blogger's

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 兴化市| 威远县| 宜兴市| 喀喇| 通山县| 玛曲县| 衡南县| 全椒县| 镇坪县| 长泰县| 长乐市| 包头市| 宁晋县| 上杭县| 延寿县| 鹤岗市| 同心县| 布拖县| 南城县| 山阴县| 府谷县| 万载县| 石林| 翁源县| 云林县| 桐梓县| 秦皇岛市| 镇江市| 武强县| 平南县| 龙游县| 太康县| 甘肃省| 方山县| 远安县| 三门峡市| 宜君县| 克拉玛依市| 永定县| 象州县| 镇雄县|