• mass Framework class模块 v11


    去掉mutators 对象,它的方法绑到$.factory上,并且它支持继续用户用其他方法定义的“类”

    //=========================================
    // 类工厂模块 v11 by 司徒正美
    //==========================================
    define("class", ["$lang"], function( $ ){
        var
        unextend = $.oneObject(["_super","prototype", 'extend', 'implement' ]),
        rconst = /constructor|_init|_super/,
        classOne = $.oneObject('Object,Array,Function');
        function expand(klass,props){
            'extend,implement'.replace( $.rword, function(name){
                var modules = props[name];
                if( classOne[ $.type( modules) ] ){
                    klass[name].apply( klass,[].concat( modules ) );
                    delete props[name];
                }
            });
            return klass;
        }
    
        var hash = {
            inherit : function( parent,init ) {
                var bridge = function() { }
                if( typeof parent == "function"){
                    for(var i in parent){//继承类成员
                        this[i] = parent[i];
                    }
                    bridge.prototype = parent.prototype;
                    this.prototype = new bridge ;//继承原型成员
                    this._super = parent;//指定父类
                    if(!this._init){
                        this._init = [parent]
                    }
                }
                this._init = (this._init || []).concat();
                if( init ){
                    this._init.push(init);
                }
                this.toString = function(){
                    return (init || bridge) + ""
                }
                var proto = this.prototype;
                proto.setOptions = function(){
                    var first = arguments[0];
                    if( typeof first === "string" ){
                        first =  this[first] || (this[first] = {});
                        [].splice.call( arguments, 0, 1, first );
                    }else{
                        [].unshift.call( arguments,this );
                    }
                    $.Object.merge.apply(null,arguments);
                    return this;
                }
                return proto.constructor = this;
            },
            implement:function(){
                var target = this.prototype, reg = rconst;
                for(var i = 0, module; module = arguments[i++]; ){
                    module = typeof module === "function" ? new module :module;
                    Object.keys(module).forEach(function(name){
                        if( !reg.test(name) ){
                            target[name] = module[name];
                        }
                    }, this );
                }
                return this;
            },
            extend: function(){//扩展类成员
                var bridge = {}
                for(var i = 0, module; module = arguments[i++]; ){
                    $.mix( bridge, module );
                }
                for( var key in bridge ){
                    if( !unextend[key] ){
                        this[key] =  bridge[key]
                    }
                }
                return this;
            }
        };
        $.factory = function( obj ){
            obj = obj || {};
            var parent = obj.inherit //父类
            var init = obj.init ;    //构造器
            delete obj.inherit;
            delete obj.init;
            var klass = function () {
                for( var i = 0 , init ; init =  klass._init[i++]; ){
                    init.apply(this, arguments);
                }
            };
            $.mix( klass, hash ).inherit( parent, init );//添加更多类方法
            return expand( klass, obj ).implement( obj );
        }
        $.mix($.factory, hash)
        return $
    });
    
    机器瞎学/数据掩埋/模式混淆/人工智障/深度遗忘/神经掉线/计算机幻觉/专注单身二十五年
  • 相关阅读:
    继续学习AJAX
    最近在看AJAX
    selenium学习模拟键盘按键操作
    二十三。克隆
    二十五。继承
    十八。类的属性
    二十一。第四章综合例题
    二十四。继承
    十七。对JAVA中堆和栈的细致了解
    十六。方法调用以及传参
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/2832052.html
Copyright © 2020-2023  润新知