最近在研究ext的源码
extend 函数定义 function(sb, sp, overrides) 不是有三个参数。为什么我们调用的时候只要两个参数呢
MyGridPanel = Ext.extend(Ext.grid.GridPanel, {
    constructor: function(config) {
   ...看了源码还是不理解?

解决方案 »

  1.   

    可以三个也可以两个,
    下面一句不是已经判定了吗
    ....
                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);};
                    }
    .....
      

  2.   

    你知道ext.extend如何传3个参数吧?
    用你给的例子,等效的extend使用3个参数大致如下
    var Ext.MyGridPanel = function(config){
       Ext.apply(this,config);
       //可能会有一些事件注册的代码
       Ext.MyGridPanel.superclass.constructor.call(this);
    }
    Ext.extend(Ext.MyGridPanel,Ext.grid.GridPanel, {
      constructor: function(config) {
      ...
      }
    }你看这时候的第二个参数类型是function
    而你的两个参数的用法,第二个参数是object
    所以就通过了if(typeof sp == 'object')这个判定,然后进行一些变量转换。