自创js类与继承的实现

2010-10-21 01:53

自创js类与继承的实现

by joe

at 2010-10-20 17:53:36

original http://xiebiji.com/2010/10/%e8%87%aa%e5%88%9bjs%e7%b1%bb%e4%b8%8e%e7%bb%a7%e6%89%bf%e7%9a%84%e5%ae%9e%e7%8e%b0/

研究了一下js的面向对象编程,模拟了一下类定义和继承,尝试过用原型来做,但是总是做不了,后来用了别的方法,可能不是最好的方法,有见解的同学欢迎评论。

function dump(o){
    console.log(o);
}
//模拟类和继承
function Class(args){
    a=function(){
        this.init=function(){
            alert('没有为类建立初始化函数');
        }
        //添加自定义参数
        for(var p in args){
            this[p]=args[p];
        }
        //初始化的时候执行
        this.init.apply(this,arguments);
    }
 
    a.extend=function(args){
        //添加自定义参数
        t=new this();//实例化一个父类,会执行父类的初始化函数
        for(var p in args){
            t[p]=args[p];
        }
        return Class(t);
    }
    return a;
}
//定义父类
var Parent=Class({
    p:1,
    //init为实例化时执行的初始化函数,雷同于php中的构造函数
    init:function(){
        this.p=4;
        alert(this.p);
    }
});
//定义子类1
var Son=Parent.extend({//继承Parent类
    s:2,
    init:function(str2){
        alert(this.s);
    }
});
//定义子类2
var Son2=Son.extend({
    s2:3,
    init:function(str3){
        alert(this.s);
    }
});
 
var p=new Parent('a');
dump(p);
var s=new Son('b');
dump(s);
var s2=new Son2('b3');
dump(s2);

输出的结果:

与本文相关的日志