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

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

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

    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 閱讀(5646) 評論(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

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲视频在线免费观看| 18亚洲男同志videos网站| 在线亚洲高清揄拍自拍一品区| 国产偷伦视频免费观看| 亚洲人成影院在线无码按摩店| 免费中文字幕视频| 亚洲精品线路一在线观看| 日韩在线观看视频免费| 亚洲无码黄色网址| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | 免费无码一区二区三区蜜桃| 国产精品亚洲产品一区二区三区| 老妇激情毛片免费| 波多野结衣视频在线免费观看 | 亚洲成a人片毛片在线| 亚洲w码欧洲s码免费| 91亚洲国产在人线播放午夜 | 嫩草影院在线播放www免费观看| 久久精品国产精品亚洲蜜月| 特级精品毛片免费观看| 亚洲日本在线观看网址| 成人看的午夜免费毛片| 国产精品观看在线亚洲人成网| 四虎永久成人免费影院域名| 欧亚一级毛片免费看| 亚洲人成影院在线无码按摩店| 国产日韩一区二区三免费高清| 亚洲精品免费在线观看| 成人免费视频88| 看一级毛片免费观看视频| 精品国产香蕉伊思人在线在线亚洲一区二区 | 亚洲处破女AV日韩精品| 99久久国产热无码精品免费| 亚洲一区二区无码偷拍| 亚洲精品岛国片在线观看| 91精品免费不卡在线观看| 亚洲人AV在线无码影院观看| 国产精品亚洲mnbav网站| 99在线观看免费视频| 亚洲成a∧人片在线观看无码| 成人亚洲性情网站WWW在线观看|