论坛首页 Web前端技术论坛

《仔仔细细分析Ext》 第一章 必须理解Ext.extend函数

浏览 12281 次
精华帖 (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(){}});

        
0 请登录后投票
   发表时间:2010-01-11  
哇哦,这个地方居然回复了这么多我都木有看到,公司上不了网。待我有空来仔细看看。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics