◆◆[b][color=red]类定义和继承[/color][/b]
◆◆[b][color=red]继承父类的类方法[/color][/b]
◆◆[b][color=red]支持带参数的基类构造, js子类默认是不会执行父类的构造函数的[/color][/b]
//定义类,同时也是定义构造函数
function SuperClass() {
//实例变量
this.instanceAttr = 'instanceAttr';
//类变量
SuperClass.classAttr = 'classAttr';
//实例方法
SuperClass.prototype.instanceFn = function(){alert('instanceFn');}
//类方法
SuperClass.classFn = function(){alert('classFn');}
};
//定义子类
function SubClass() {
};
//定义继承,让SubClass继承SuperClass
SubClass.prototype = new SuperClass();
//示例
var obj = new SubClass();
obj.instanceFn();
//obj.classFn(); //不支持这样写
SuperClass.classFn();
◆◆[b][color=red]继承父类的类方法[/color][/b]
//定义类,同时也是定义构造函数
function SuperClass() {
//类方法
SuperClass.classFn = function(){alert('classFn');};
};
//定义子类
function SubClass() {
};
//定义继承,让SubClass继承SuperClass
SubClass.prototype = new SuperClass();
//将SuperClass的类方法也继承下来
for(var method in SuperClass)
{
SubClass.prototype[method] = SuperClass[method];
}
var obj = new SubClass();
obj.classFn();
◆◆[b][color=red]支持带参数的基类构造, js子类默认是不会执行父类的构造函数的[/color][/b]
//定义类,同时也是定义构造函数
function SuperClass(x) {
SuperClass.prototype.constructor = function(x) {
this.instanceAttr = x;
}
//实例变量
this.instanceAttr = 'instanceAttr';
if (x != null) this.constructor(x);
};
//定义子类
function SubClass(x) {
SubClass.prototype.constructor = function(x) {
//先调用基类的构造函数
this.superclass.constructor.call(this, x);
}
if (x != null) this.constructor(x);
};
//定义继承,让SubClass继承SuperClass
SubClass.prototype = new SuperClass();
SubClass.prototype.superclass = new SuperClass();
//示例
var obj1 = new SubClass();
alert(obj1.instanceAttr); //访问实例变量
var obj2 = new SubClass('new value');
alert(obj2.instanceAttr); //访问实例变量