JavaScript之子类构建工具

(function(){
        var initializing = false;
        var superPattern = /xyz/.test(function(){ xyz; }) ? /\b_super\b/ : /.*/;
        
        Object.subClass = function(properties){//给Object添加一个subClass方法
                var _super = this.prototype;//初始化超类
                initailizing = true;
                var proto = new this();
                
                for(var name in properties){
                        proto[name] = typeof properties[name] == "function" && typeof _super[name] == "function" && superPattern.test(properties[name]) ?
                        (function(name,fn){//定义一个重载函数
                                return function(){
                                        var tmp = this._super;

                                        this._super = _super[name];

                                        var ret = fn.apply(this,arguments);
                                        this._super = tmp;
                                        return ret;
                                }
                        })(name,properties[name]) : properties[name];  
                }
        }

        function Class(){
                if(!initializing && this.init){//创建一个仿真类构造器
                        this.init.apply(this.arguments);
                }
                
                Class.prototype = proto;//设置类的原型

                Class.constructor = Class;//重载构造器引用

                Class.subClass = arguments.callee;//让类继续可扩展

                return Class;           
        }       
})()