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 阅读(5617) 评论(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年2月>
2930311234
567891011
12131415161718
19202122232425
2627281234
567891011

统计

随笔分类

随笔档案

文章档案

Blogger's

搜索

最新评论

阅读排行榜

评论排行榜