类之Prototype.js学习


Posted in Javascript onJune 13, 2007

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

Javascript 相关文章推荐
javascript真的不难-回顾一下基础知识
Jan 15 Javascript
input输入框鼠标焦点提示信息
Mar 17 Javascript
jquery 构造函数在表单提交过程中修改数据
May 25 Javascript
详解jQuery中的empty、remove和detach
Apr 11 Javascript
canvas的神奇用法
Feb 03 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
Apr 25 Javascript
vue-resource 拦截器(interceptor)的使用详解
Jul 04 Javascript
全面解析jQuery中的$(window)与$(document)的用法区别
Aug 15 jQuery
详解Js中的模块化是如何实现的
Oct 18 Javascript
原生js实现淘宝放大镜效果
Oct 28 Javascript
react-native 实现购物车滑动删除效果的示例代码
Jan 15 Javascript
Node与Python 双向通信的实现代码
Jul 16 Javascript
JavaScript语法着色引擎(demo及打包文件下载)
Jun 13 #Javascript
Apply an AutoFormat to an Excel Spreadsheet
Jun 12 #Javascript
Add Formatted Data to a Spreadsheet
Jun 12 #Javascript
excel操作之Add Data to a Spreadsheet Cell
Jun 12 #Javascript
List Installed Hot Fixes
Jun 12 #Javascript
List the UTC Time on a Computer
Jun 11 #Javascript
List the Codec Files on a Computer
Jun 11 #Javascript
You might like
PHPlet在Windows下的安装
2006/10/09 PHP
PHP array 的加法操作代码
2010/07/24 PHP
取得单条网站评论以数组形式进行输出
2014/07/28 PHP
PHP将身份证正反面两张照片合成一张图片的代码
2017/04/08 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
2018/01/20 PHP
Yii2框架redis基本应用示例
2018/07/13 PHP
广告切换效果(缓动切换)
2009/05/27 Javascript
jquery CSS选择器笔记
2010/03/29 Javascript
EXTJS记事本 当CompositeField遇上RowEditor
2011/07/31 Javascript
jquery使用append(content)方法注意事项分享
2014/01/06 Javascript
如何防止回车(enter)键提交表单
2014/05/11 Javascript
jQuery中odd选择器的定义和用法
2014/12/23 Javascript
Node.js的包详细介绍
2015/01/14 Javascript
jQuery层动画定位滑动效果的方法
2015/04/30 Javascript
js实现unicode码字符串与utf8字节数据互转详解
2019/03/21 Javascript
微信小程序本地存储实现每日签到、连续签到功能
2019/10/09 Javascript
[05:09]第二届DOTA2亚洲邀请赛决赛日比赛集锦:iG 3:0 OG夺冠
2017/04/05 DOTA
[18:16]sakonoko 2017年卡尔集锦
2018/02/06 DOTA
Python实现竖排打印传单手机号码易撕条
2015/03/16 Python
Python的Flask框架中实现简单的登录功能的教程
2015/04/20 Python
Python实现的简单排列组合算法示例
2018/07/04 Python
python3利用venv配置虚拟环境及过程中的小问题小结
2018/08/01 Python
pandas的排序和排名的具体使用
2019/07/31 Python
利用python实现PSO算法优化二元函数
2019/11/13 Python
python 循环数据赋值实例
2019/12/02 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
一款简洁的纯css3代码实现的动画导航
2014/10/31 HTML / CSS
Ruby如何进行文件操作
2014/07/17 面试题
初一体育教学反思
2014/01/29 职场文书
2014植树节活动总结
2014/03/11 职场文书
新春寄语大全
2014/04/09 职场文书
男性健康日的活动方案
2014/08/18 职场文书
交通事故赔偿协议书
2014/10/16 职场文书
环保守法证明
2015/06/24 职场文书
团结主题班会
2015/08/13 职场文书
2016年春节慰问信息大全
2015/11/30 职场文书