日期:2014-05-16  浏览次数:20384 次

简单的js面向对象框架实现
新年上班第一天,闲暇之余,看了下jquery作者john resig关于继承的一些idea,顺便自己写了个简单的js继承小框架
/**
* 简单的js继承小框架
* @date 2014/2/8
* @author lsj
*/
(function(){

    //基类
    this.JClass=function(){

    }
   //继承方法(创建一个新类继承自该类)
    JClass.extend=function(child)
    {
        var parent=new this;
        var superpro=this.prototype;
        //将子类的方法赋给父类的原型
        for(var item in child)
        {
            superpro[item]=child[item];
        }
        //覆盖JClass基类,提供子类初始化方法入口
        function  JClass()
        {
            //如果子类有写init方法,则通过该方法进行类初始化
            if(this.init)
            {
                this.init.apply(this,arguments);
            }
        }
        //将子类的原型指向父类的实例(该实例的_proto_指向superpro)
        JClass.prototype=parent;
        //改变原型的构造函数指向
        JClass.prototype.constructor=JClass;
        //实现JClass的可继承
        JClass.extend=arguments.callee;

        return  JClass;
    }
})();
var Parent=JClass.extend({"name":"zhangsan","age":"10"});

var Child=Parent.extend({init:function(data){this.data=data;},"childname":"this is childname",sayHello:function(){alert(this.data)}});

var cchild=new Child("this is the initial method of child");

console.dir(cchild);     //cchild的对象导图

cchild.sayHello();        //打印出this is the initial method of child