`
wmingjian
  • 浏览: 12925 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

alzui类封装的演化过程(续)--含继承机制和_super关键字

阅读更多
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);
	};
});

就先写这些吧,整个封装的演化过程已经是历史了,想回忆清楚还真有点难度。^_^
3
3
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics