`

[ExtJS3.2源码每天一小时](2)ext-base.jsExt的继承与覆盖不再神秘

阅读更多
1.extend继承,继承的原理相对来说比较复杂,从根本来说就是引用之间的变更,原型链的应用,稍不注意就可能绕晕了,所以看这块代码的时候头脑一定要清晰。
function extend(sb, sp, overrides) {
	
	//如果sp是对象,不是类,那么使用extend函数时,直接把覆盖项都放于sp中
	if (typeof sp == 'object') {
		overrides = sp;//如果sp是对象,那么overrides必为undefined,因为可以把覆盖项都放于sp中,于是将sp的内容作为overrides。
		sp = sb;//由于现在sb需要继承的属性来自overrides,那么丢弃sp的引用,令sb、sp持有相同的引用。
		//如果overrides的构造器不是默认的构造器,说明用户要覆盖构造器,那么子类使用overrides的构造器,否则指定为子类自己的构造器
		sb = overrides.constructor != oc ? overrides.constructor : sb.constructor;
	}
	//如果上面的if成立,那么sb=sp,下面的原型对象引用的变更将没有任何的意义。再if不成立的条件下,下面的代码才有意义。
	var F = function() {
	}, sbp, spp = sp.prototype;
	F.prototype = spp;
	sbp = sb.prototype = new F();
	//因为sb的原型对象被F的对象覆盖,那么原型对象的构造器目前是F的,必须要赋值回sb
	sbp.constructor = sb;
	//给sb的superclass属性赋值
	sb.superclass = spp;
	
	//为了下面给sbp的superclass属性复制后,能够通过父类的原型能够执行父类的构造器,把原型中的Object构造器换为Function构造器
	if (spp.constructor == oc) {
		spp.constructor = sp;
	}
	//给sb的原型的superclass属性赋值,sb的对象可以调用superclass()获得父类的原型
	sbp.superclass = sbp.supr = (function() {
		return spp;
	});
	//将overrides中的东西覆盖到sb中
	override(sb, overrides);
	
	//给sb添加自身的继承方法,可以直接调用sb.extend(o);
	sb.extend = function(o) {
		return ex(sb, o);
	};
	return sb;

2. override覆盖

       //origclass原始类,overrides包含各个覆盖项的对象

       override : function(origclass, overrides){
            if(overrides){
                var p = origclass.prototype;
                Ext.apply(p, overrides);//通过apply方法,将覆盖项覆盖到原始类的原型对象中。
                if(Ext.isIE && overrides.hasOwnProperty('toString')){ //既然有上面那句了,为什么还要写下面这三行呢,因为在ie中,for (var method in overrides) 循环中method拿不到toString属性,而恰恰Ext.applay就用的循环指定,所以toString必须单独指定
                    p.toString = overrides.toString;
                }
            }
        },
分享到:
评论

相关推荐

    ext 2 简单例子(内附ext-all.css, ext-base.js, ext-all.js三个必不可少的文件)

    ext 是 ExtJs 的简称,是一个强大的js 类库。本资源主要包括三个大的文件ext-all.css,ext-base.js,ext-al.js。在引用ext 类库的时候,这三个文件必不可少。另外我还提供了ext2的一个简单例子,以便大家学习交流。

    extjs-basex.js

    extjs-basex.js extjs-basex.js extjs-basex.js

    ext-4.2.1.883.jsb2

    从spket IDE 官网下载。 文件名: ext-4.2.1.883.jsb2 对应版本ext-4.2.*版本。spket自动提示ExtJs4,需要ext4.2.1.jsp2文件。

    ExtJS入门教程

    <script type="text/javascript" src="extjs3.2/adapter/ext/ext-base.js"> <script type="text/javascript" src="extjs3.2/ext-all-debug.js"> <script type="text/javascript" src="extjs3.2/ext-lang-zh_...

    ext-lang-en.js和ext-lang-zh_CN.js

    Extjs中实现国际化要用到的文件ext-lang-zh_CN.js和ext-lang-en.js

    ext-all.js

    extjs3.3 格式化好的ext核心文件

    ext-2.2.zip

    在CDH使用oozie 的时候需要安装ext-...我用之前的ext版本 当只有一页数据时,页码导航不会灰色,换成ext2.2就正常了。页码导航条中的刷新按钮也有小变化。 另外界面美化了很多。Ext.form.ComboBox 的样式就很漂亮!

    Extjs 6.2 最新sdk ext-6.2.0-gpl.zip

    官方最新版本Extjs6.2版本sdk,创建新项目的时候需要用, 全面的核心框架,具有最新的Javascript标准支持 新的漂亮组件和主题,以创建漂亮的企业应用程序 现代工具链,用于构建优化,高性能,通用的应用程序 用于可视...

    ext-7.0.0-gpl.zip

    ext-7.0.0-gpl.zip

    ext-3.3.1.rar

    extjs ajax 框架 extjs ajax 框架extjs ajax 框架

    Spket_ExtJS提示工具ext-core-dev.js.zip

    软件介绍: Spket的ExtJS提示工具,内附需要加入ExtJS的提示内容文件ext-core-dev.js ,所需要的都整合为一个压缩包,一步到位直接使用。featurespluginsext-core-dev.js

    ext-bootstrap.js

    ext-bootstrap.js

    ext-4.2.0.663 EXTJS官方最新版7z压缩

    ext-4.2.0.663 EXTJS官方最新版7z压缩 为了上传方便,使用了7z极限压缩,解压时请使用7z,以防文件损坏

    ext-5.1.0.jsb2

    从spket IDE 官网下载。 文件名: ext-5.1.0.jsb2 对应版本ext-5.1.*版本。spket自动提示ExtJs5,需要ext-5.1.0.jsb2文件。

    ext-3.2.0.7z

    ext-3.2.0.7z

    Extjs3.4+Ext-core.pdf+轻松搞定Extjs.pdf

    Extjs3.4 Ext-core.pdf 轻松搞定Extjs.pdf Extjs学习笔记 里面有3.4的开发包,附属:Ext-core.pdf 轻松搞定Extjs.pdf Extjs学习笔记

    extjs jsb文件(ext-4.2.1.883.jsb2)

    从ext官方论坛上下的。 文件名: ext-4.2.1.883.jsb2 对应版本ext-4.2.1.883

    extjs-Ext.ux.form.LovCombo下拉框

    extjs多选下拉框,Ext.ux.form.LovCombo,extjs 以修复多选下拉框火狐下取不到值的问题,火狐下div不显示背景色的问题

    extjs extjs-basex.js

    extjs-basex.js extjs-basex.js extjs-basex.js

    ext-4.2.1-gpl.zip

    ExtJs4环境,不包括例子,太大了没法上传

Global site tag (gtag.js) - Google Analytics