类之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 相关文章推荐
不使用XMLHttpRequest实现异步加载 Iframe和script
Oct 29 Javascript
在JavaScript的正则表达式中使用exec()方法
Jun 16 Javascript
js监听input输入框值的实时变化实例
Jan 26 Javascript
jQuery实现导航回弹效果
Feb 27 Javascript
xmlplus组件设计系列之文本框(TextBox)(3)
May 03 Javascript
原生JavaScript实现精美的淘宝轮播图效果示例【附demo源码下载】
May 27 Javascript
javascriptvoid(0)含义以及与"#"的区别讲解
Jan 19 Javascript
ES6的解构赋值实例详解
May 06 Javascript
30分钟用Node.js构建一个API服务器的步骤详解
May 24 Javascript
layui 解决富文本框form表单提交为空的问题
Oct 26 Javascript
node.js express捕获全局异常的三种方法实例分析
Dec 27 Javascript
jQuery使用jsonp实现百度搜索的示例代码
Jul 08 jQuery
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
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
PHP strip_tags保留多个HTML标签的方法
2016/05/22 PHP
JSON两种结构之对象和数组的理解
2016/07/19 PHP
PHP数组生成XML格式数据的封装类实例
2016/11/10 PHP
详解PHP5.6.30与Apache2.4.x配置
2017/06/02 PHP
javascript 表单验证常见正则
2009/09/28 Javascript
给ListBox添加双击事件示例代码
2013/12/02 Javascript
JavaScript里四舍五入函数round用法实例
2015/04/06 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
浅谈javascript中new操作符的原理
2016/06/07 Javascript
Centos7 中安装 Node.js v4.4.4
2016/11/03 Javascript
JS制作类似选项卡切换的年历
2016/12/03 Javascript
使用BootStrap进行轮播图的制作
2017/01/06 Javascript
vue实现图书管理demo详解
2017/10/17 Javascript
微信小程序实现页面浮动导航
2019/01/28 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
解决Vue中 父子传值 数据丢失问题
2019/08/27 Javascript
JS实现简单随机3D骰子
2019/10/24 Javascript
在vue中利用全局路由钩子给url统一添加公共参数的例子
2019/11/01 Javascript
在vue中实现嵌套页面(iframe)
2020/07/30 Javascript
基于jQuery拖拽事件的封装
2020/11/29 jQuery
详细讲解Python中的文件I/O操作
2015/05/24 Python
Python编码爬坑指南(必看)
2016/06/10 Python
理想高通滤波实现Python opencv示例
2019/01/30 Python
Pytorch Tensor的索引与切片例子
2019/08/18 Python
使用NumPy读取MNIST数据的实现代码示例
2019/11/20 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
2020/05/26 Python
波兰最早的运动鞋精品店之一:Street Supply
2019/08/29 全球购物
新加坡鲜花速递/新加坡网上花店:Ferns N Petals
2020/08/29 全球购物
酒店个人求职信范文
2014/01/25 职场文书
财务部总监岗位职责
2014/03/12 职场文书
小学生手册家长评语
2014/04/16 职场文书
办公室岗位职责范本
2015/04/11 职场文书
认识实习感想
2015/08/10 职场文书
《百分数的认识》教学反思
2016/02/19 职场文书
Android开发EditText禁止输入监听及InputFilter字符过滤
2022/06/10 Java/Android