本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7587796
建立时间:2006年5月29日




[Prototype(Ajax)]Prototype.js学习
软件技术

lhwork 发表于 2006/9/7 10:14:24

Prototype.js作为javascript的成功的开源框架,封装了很多好用的功能,虽然官方没提供什么文档,不过在google上一搜,好多相 关的文档,不过在学习使用的过程中还是碰到了一些问题,希望熟悉的朋友能多加指点,对于prototype.js学习我关注这么几点,同时针对每点也讲讲 学习的结果和碰到的问题,^_^1、类的创建      prototype.js已经封装好了,这个很简单。 500)this.width=500'>var Person=Class.create();      这样就创建了一个Person类,这个Person类必须提供initialize方法的实现: 500)this.width=500'>500)this.width=500'>Person.prototype=500)this.width=500'>{500)this.width=500'>500)this.width=500'>                 initialize:function()500)this.width=500'>{500)this.width=500'>                 }500)this.width=500'>      };      对比java,Class.create相当于Class.forName(),initialize相当于构造器,和java的构造器一样,可以自定义为带参数性质的。      可以看到在使用这样的方式定义class后,它和javascript原来的通过function方式来定义一个类就有明确的区分了,在这种情况下我们就可以用Class.create来定义类,用function来直接定义函数。      类通常还涉及静态成员(static性质的)和实例成员(需要实例化才可调用)的定义。      在javascript中这点也非常容易:      静态成员:   500)this.width=500'>500)this.width=500'>var Person=500)this.width=500'>{500)this.width=500'>                name:'person',500)this.width=500'>500)this.width=500'>                getName:function()500)this.width=500'>{return 'person'}500)this.width=500'>      };      实例成员:     500)this.width=500'>500)this.width=500'>Person.prototype=500)this.width=500'>{500)this.width=500'>               childname:'child',500)this.width=500'>               eat:function()500)this.width=500'>      }      上面的Person.getName是可以直接这么调用的,但eat方法则需通过var person=new Person();person.eat();的方式来调用。2、类的继承      类的继承其实javascript本身就支持的,不过prototype提供了一种另外的方法。      按照javascript的支持的实现: 500)this.width=500'>var Student=Class.create();500)this.width=500'>      Student.prototype=new Person();      这样就实现了Student继承至Person。      在使用prototype的情况下可以这么实现: 500)this.width=500'>      var Student=Class.create();500)this.width=500'>      Object.extend(Student.prototype,Person.prototype);      子类要增加方法时可使用  500)this.width=500'>500)this.width=500'>Student.prototype.study=function()500)this.width=500'>{};      或  500)this.width=500'>500)this.width=500'>Object.extend(Student.prototype,500)this.width=500'>{500)this.width=500'>500)this.width=500'>                                                                   study:function()500)this.width=500'>{}500)this.width=500'>                                                          });3、事件机制(对类方法执行的监听和观察)      在事件机制上则碰到了一些疑惑,作为事件机制主要需要提供事件的定义,对于事件的监听以及对于事件的观察。      在javascript中事件需要以on开头,也就是作为事件就需要采用onclick这样类似的命名:      对上面的Student增加一个对外的事件,如:     500)this.width=500'>500)this.width=500'>Student.prototype.study=function()500)this.width=500'>{500)this.width=500'>             this.onstudy();500)this.width=500'>      }500)this.width=500'>500)this.width=500'>      Student.prototype.onstudy=function()500)this.width=500'>{};      这个onstudy就是交给相应的实例去实现的,例如实例采用这样的方式:  500)this.width=500'>500)this.width=500'>      function studyThis()500)this.width=500'>{500)this.width=500'>          alert("study this");500)this.width=500'>      }500)this.width=500'>      var student=new Student();500)this.width=500'>      student.onstudy=studyThis();      对于事件通常都希望进行监听和观察,根据prototype提供的bindAsEventListener以及Observe,这么进行了尝试: 500)this.width=500'>study.onstudy=watchStudy.bindAsEventListener(this);500)this.width=500'>500)this.width=500'>      function watchStudy(event)500)this.width=500'>{500)this.width=500'>            alert("watch study");500)this.width=500'>      }      按 照事件机制来说,在执行study的时候应该可以看到study this和watch study两个提示,但最后执行后只能看到watch study的提示,这是为什么呢?按照listener的概念的话,不应该覆盖原有方法的,不过我看了一下prototype.js的源代码,按照上面的 编写方式确实会照成覆盖原方法。      Observe是这么尝试的:      Event.observe(study,'study',watchStudy,false);      按照观察机制来说,应该在执行study的时候会看到两个提示,但最后执行后这行根本就没起到任何作用。      这是为什么呢?


阅读全文(2726) | 回复(2) | 编辑 | 精华
 


回复:Prototype.js学习
软件技术

btpka3@163.com(游客)发表评论于2006/10/9 11:28:55

<textarea> 又发一遍, 没想到这个评论没有对html标签进行转码 最后的代码段笔误吧: 应该是 student.onstudy 才对!! 还有, 看以下: <div id='the_div'> div's attachEvent() is exist, while custom Object' is not! </div> <script> alert($("the_div").attachEvent+$("the_div").addEventListener); //对IE来说, attachEvent是存在的! alert(student.attachEvent + student.addEventListener); //然而, 自定义对象的两个函数在IE中都没有 </script> 因为prototype.js中 Event.observe函数会间接的调用attachEvent 或addEventListener, 而自定义对象没有该函数, 所以就必须自己手工实现!! 参考: http://bbs.blueidea.com/viewthread.php?tid=2550175 </textarea>


个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


关于最后的疑问 回复:Prototype.js学习
软件技术

btpka3@163.com(游客)发表评论于2006/10/9 11:26:17

最后的代码段笔误吧: 应该是 student.onstudy 才对!! 还有, 看以下: div's attachEvent() is exist, while custom Object' is not! alert($("the_div").attachEvent+$("the_div").addEventListener); //对IE来说, attachEvent是存在的! alert(student.attachEvent + student.addEventListener); //然而, 自定义对象的两个函数在IE中都没有 因为prototype.js中 Event.observe函数会间接的调用attachEvent 或addEventListener, 而自定义对象没有该函数, 所以就必须自己手工实现!! 参考: http://bbs.blueidea.com/viewthread.php?tid=2550175

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.063 second(s), page refreshed 144766414 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号