|
Prototype.js作為Javascript的成功的開源框架,封裝了很多好用的功能,雖然官方?jīng)]提供什么文檔,不過在google上一搜,好多相關(guān)的文檔,不過在學習使用的過程中還是碰到了一些問題,希望熟悉的朋友能多加指點,對于prototype.js學習我關(guān)注這么幾點,同時針對每點也講講學習的結(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就是交給相應的實例去實現(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的時候應該可以看到study this和watch study兩個提示,但最后執(zhí)行后只能看到watch study的提示,這是為什么呢?按照listener的概念的話,不應該覆蓋原有方法的,不過我看了一下prototype.js的源代碼,按照上面的編寫方式確實會照成覆蓋原方法。
Observe是這么嘗試的:
Event.observe(study,'study',watchStudy,false);
按照觀察機制來說,應該在執(zhí)行study的時候會看到兩個提示,但最后執(zhí)行后這行根本就沒起到任何作用。
這是為什么呢?
JavaScript技術(shù):類之Prototype.js學習,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。