关于Ext.extend函数里面的一个问题?

focuserp 2011-01-28 06:58:58
function extend (){
// inline overrides
var io = function(o){
for(var m in o){
this[m] = o[m];
}
};
return function(sb, sp, overrides){
if(typeof sp == 'object'){
overrides = sp;
sp = sb;
sb = 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 == Object.prototype.constructor){
spp.constructor=sp;
}

sb.override = function(o){
Ext.override(sb, o);
};
sbp.override = io;
Ext.override(sb, overrides);
return sb;
};

}();


------------
红色的代码是什么意思啊?spp.constructor判断依据是什么?
...全文
79 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
灬上海爽爷 2011-02-01
  • 打赏
  • 举报
回复
KK3K2005 2011-02-01
  • 打赏
  • 举报
回复
好样的~~~
itinfm 2011-02-01
  • 打赏
  • 举报
回复
看来没人研究这个问题吗?
网上也有人对这个产生过疑问,但没有找到正确答案!
好了,自己动手风衣足食!通过我不断的调试EXTJS!终于找到了原因!

var a=function(){};

alert(a.prototype.constructor);

a.prototype={
bc:function(){}
}

alert(a.prototype.constructor);

这两个弹出来的东西不一样了,原因就是:

a.prototype={
bc:function(){}
}

其实相当于:
a.prototype=new object{};
这样的话使得a的构造函数变成了object!

在EXTJS有很多是这样的写法,为什么要这么写了,是为了方便,要按照以前的写法,就要这样写,
a.prototype.bc=function(){};
a.prototype.cd=function(){};
a.prototype.df=function(){};

这样写不会使a的构造函数发生变化,但太麻烦了!所以EXTJS源码中有很多这样写的
a.prototype={
bc:function(){},
cd:function(){},
df:function(){}
}

所以在EXTEND函数,就要把这样的函数对象的构造函数恢复回来!


87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧