精华帖 (14) :: 良好帖 (4) :: 新手帖 (0) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-08
跟大漠哥讨论了下面这一段代码的理解,最后总算有了个重新的认识,跟我有同样问题的可以看看哈:
var oc = Object.prototype.constructor; return function(sb, sp, overrides){ if(typeof sp == 'object'){ overrides = sp; sp = sb; sb = overrides.constructor != oc ? overrides.constructor : function(){sp.apply(this, arguments);}; } } 我当时的疑问是:如果进入了if里面,就是typeof sp=='object',那么这种继承就可能是像Ext.extend(Ext.Panel,{...}}这种类型的继承,sp就是{..}这种类型的对象, 那最后一句 sb = overrides.constructor != oc ? overrides.constructor : function(){sp.apply(this, arguments);}; 这句中的选择赋值就没有必要,因为这时overrides就是{...}这样的对象,overrides.constructor==oc,没有必要再判断,所以我猜一定还可以传另外一种参数,类型是object,而constructor不等于oc.遂求问于大漠哥, 还真是有, 这种写法就是Ext.extend(Ext.Panel,{constructor:function(){}}), 据大漠哥说,这在Ext源码里常用到,就是在立即对象里面提供一个constructor属性。 这个时候overrides.constructor != oc就为true了. 最后总结了一下 Ext继承目前有三种写法 * 1. var Subclass = function(){...}; * Ext.extend(Subclass, Superclass, {...}); * 2. var Subclass = Ext.extend(Superclass, {...}); 1. Ext.MyPanel=function(){}; Ext.extend(MyPanel,Ext.Panel,{...}); 2. var MyPanel=Ext.extend(Ext.Panel,{...}) 3. var MyPanel=Ext.extend(Ext.Panel,{constructor:function(){}}); |
|
返回顶楼 | |
发表时间:2010-01-11
哇哦,这个地方居然回复了这么多我都木有看到,公司上不了网。待我有空来仔细看看。
|
|
返回顶楼 | |