EXT分析(1)--extend继承函数

由于公司提交数据会过滤代码。
只能加入解读文字部分。
原文件为 ext-3.3.0\src\ext-core\src\core\Ext.js



//内部函数
var io = function(o){
for(var m in o){
this[m] = o[m];
}
}


//所有的浏览器都有Object.prototype.constructor函数
//最原始的Object 初始化函数
var oc = Object.prototype.constructor;


//这个函数才是实际运行的extend函数。上边是此函数的局部变量和局部函数
//两参数和三参数的调用中,参数subclass,和superclass的对象位置是错开的
//传入参数的命名是按传入三个参数的方式命名, sb = subclass, sp = superclass, overrides = overrides
//传入两参数时 sb = superclass, sp = overrides
return function(sb, sp, overrides){


//没有传第三个参数的情况
//sb 参数1 是supperclass
//sp 参数2 是subclass
//在此时 参数名的意义和实际是相反的,if操作的主要意义在于将参数对应到正确的参数名上。
//在if运行完后参数对应的意义才正确
if(typeof sp == 'object'){
overrides = sp;
sp = sb;
//如果一个普通的对象,constructor == Object.prototype.constructor
sb = overrides.constructor != oc ? overrides.constructor : function(){sp.apply(this, arguments);};
}


//sp 是一个function 同时也是一个类 可用new进行操作。
//生成superclass的prototpye的实例对象,并将其付给subclass作为其prototype
//生成一个干净的初始化函数,不用superclass的初始化函数,以防将prototype的内容改变。
var F = function(){},
sbp,
spp = sp.prototype;
// 将superclass的prototype传递给干净的function F
F.prototype = spp;
//实例化,其主要目的是将prototype进行copy,创建副本
//不然subclass,和supperclass的prototype是同一对象,后续对prototype的属性改动将会同时影响到subclass,和supperclass.
sbp = sb.prototype = new F();


//保证类的prototype中constructor为自己的构造函数。
//这是Ext的一条默认规则:Ext中的类,其prototype中的constructor必须为其构造函数
sbp.constructor=sb;
sb.superclass=spp;
//对其supperclass也要,保证上述规则
if(spp.constructor == oc){
spp.constructor=sp;
}


sbp.superclass //返回其父类的prototype
sbp.supr //返回其父类的prototype


//Object级的override
sbp.override = io;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值