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的时候会看到两个提示,但最后执行后这行根本就没起到任何作用。
这是为什么呢?