extjs源码分析-006(Ext.override/Ext.extend)

        override : function(origclass, overrides){//方法重载,不存在就添加,存在就覆盖原有方法
            if(overrides){
                var p = origclass.prototype;
                Ext.apply(p, overrides);//调用apply继承
                if(Ext.isIE && overrides.hasOwnProperty('toString')){
                    p.toString = overrides.toString;
                }
            }
        },
        extend : function(){//Ext继承并扩展
            // inline overrides
            var io = function(o){//把所以属性复制给io
                for(var m in o){
                    this[m] = o[m];
                }
            };
            var oc = Object.prototype.constructor;//Object的构造函数

            return function(sb, sp, overrides){
                if(typeof sp == 'object'){//当父类为object对象
                       overrides = sp;//需要继承的
                    sp = sb;
                 //为继承类设置构造函数
                    sb = overrides.constructor != oc ? overrides.constructor : function(){sp.apply(this, arguments);};
                }
                var F = function(){},
                    sbp,
                    spp = sp.prototype;

                F.prototype = spp;
                sbp = sb.prototype = new F();
                sbp.constructor=sb;
                sb.superclass=spp;
                if(spp.constructor == oc){
                    spp.constructor=sp;
                }
                sb.override = function(o){
                    Ext.override(sb, o);
                };
                sbp.superclass = sbp.supr = (function(){
                    return spp;
                });
                sbp.override = io;
                Ext.override(sb, overrides);
                sb.extend = function(o){return Ext.extend(sb, o);};
                return sb;
            };
        }()

你可能感兴趣的:(override,extend,prototype,ExtJs)