11、回顾一下类的形式定义(根类雏形基本形成)
_class("AObject", function(){ this._init = function(){ this._disposed = false; }; //这个方法具体作何用途只能以后说明了,暂且理解成析构函数吧 this.dispose = function(){ this._disposed = true; }; });
12、设计基类的目的是为了继承,所以有必要对基础支持代码做些调整,以便于支持继承
在_class函数第二个参数位置添加一个参数superClass,用来引用当前类的父类,注意放在第二个位置是有目的的,主要是为了和java中的类定义形式产生对照关系。
//---- 基础支持代码开始 ---- function __newClass(){ return function(){ this._init.apply(this, arguments); }; } function _class(className, superClass, classImp){ if(superClass === null){ //如果是null,默认父类为Object(实现中只有AObject继承自Object) superClass = Object; }else if(superClass === ""){ //如果是"",默认父类为AObject,为什么这么做,还不便说清楚,以后再详细说明理由吧! superClass = window["AObject"]; } var clazz = __newClass(); clazz.prototype = new superClass(); //这是模拟继承的关键语句 window[className] = clazz; classImp.apply(clazz.prototype); } //---- 基础支持代码结束 ---- _class("AObject", null, function(){ this._init = function(){ this._disposed = false; }; this.dispose = function(){ this._disposed = true; }; });
13、继承机制已经实现,下面就是如何方便的调用父类同名方法了,_super关键字登台
function __newClass(){ return function(){ this._init.apply(this, arguments); }; } function _class(className, superClass, classImp){ if(superClass === null){ superClass = Object; }else if(superClass === ""){ superClass = window["AObject"]; } var clazz = __newClass(); clazz.prototype = new superClass(); var _super = superClass.prototype; //原来_super的含义只是这个 window[className] = clazz; classImp.apply(clazz.prototype, [_super]); } _class("AObject", null, function(){ this._init = function(){ this._disposed = false; }; this.dispose = function(){ this._disposed = true; }; }); //定义一个类,继承自AObject _class("ClassA", "", function(_super){ this._init = function(){ _super._init.call(this); this._name = "ClassA"; }; this.dispose = function(){ //就是这么调用父类方法的,看来也不是很简洁,讲究着用吧,总比写出来父类的名 //字的形式要稳定的多! _super.dispose.apply(this); }; });
就先写这些吧,整个封装的演化过程已经是历史了,想回忆清楚还真有点难度。^_^