b.prototype=(new a()).extend({});
因为让一个b继承自a,通常b之前都是一个未定义的类,所以后面的{}中其实就可以定义类成员。当然,你也可以先定义,再继承,只是和传统概念有所区别了。
AJAX之旅(3):javascript中的事件设计模式
今天暂时抛开prototype1.3.1,分享一下我的javscript事件设计心得。其实现的技术基础在于函数的本质,这在前面两篇中有详细叙述(更多请关注:http://www.x2design.net)。
javascript内置的对象都有事件功能,比如button就有onclick事件,input就有onchange事件。那么如何在我们自定义的类中实现事件呢?很简单:
var myClass=Class.create();
myClass.prototype={
show:function(){
//statement
onshow();
},
onshow:function(){}
}
这段代码其实就是实现了onshow事件,在myClass实例show的时候触发,你可以给onshow绑定一个函数,从而使用事件功能。在javascript中,内置的对象事件使用方法都是如此,其内部实现应该也是基于这样的模式。但是,这样的实现却有两个突出的问题:
1.只能绑定一个回调函数。如果要实现多绑定,必须自己写很多代码来封装要回调的函数到一个函数中。
2.不能传递参数。因为onshow只能赋给函数名,即函数体本身,并不能传递参数进去,为了传递参数,我曾写过一篇:《用外壳包装法给javascript触发器传递参数》,可见,同样需要写很多代码。
那么,这些问题怎么解决呢?javascript内置对象的事件使用我们就暂时不管,来考虑一下怎么在自己实现的类中避免如上两个问题。实现之前,先来考虑下面这个问题,或许有助于理解实现这个功能的意义:
我的页面需要用javascript进行一些初始化,但初始化必须在页面载入完成之后进行。通常我们会将代码放到html文件最下面。但此时,在页面载入完成之前,页面上的按钮点击需要调用必须经过初始化的方法,如果不作判断,那么就很容易出现脚本错误。因为还没有初始化,一个简单的想法是:用一个bool变量loaded来判断,初始为false,初始化完成后为true,那么按钮点击时遇到false就简单返回。这实现固然简单,但有可能造成用户发现点击无效,而不知其所以然。所以完善的做法应该是能捕获这个方法,将其绑定到页面载入完成事件上,当页面载入完成后自动调用。
好,现在看事件设计模式的实现代码:
var myClass=Class.create();
myClass.prototype={
initialize:function(){
this.initEvent=new Object();
},
init:function(){
//初始化要执行的语句
//下面是调用绑定的回调函数
for(var p in this.initEvent){










