JavaScript模拟面向对象

◆◆[b][color=red]类定义和继承[/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); //访问实例变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值