ExtJS 3.1 で Ext.applyIf の動作が変わっています

ExtJS の Ext.applyIf の動作が、3.0 と 3.1 とで変わっています。

ソースコードを見ると一目了然です。

3.0

applyIf : function(o, c){
  if(o){
    for(var p in c){
      if(Ext.isEmpty(o[p])){ <-- ここが変わっている
        o[p] = c[p];
      }
    }
  }
  return o;
},

3.1

applyIf : function(o, c){
  if(o){
    for(var p in c){
      if(!Ext.isDefined(o[p])){ <-- ここが変わっている
        o[p] = c[p];
      }
    }
  }
  return o;
},

プロパティ値を上書きする判定条件が、isEmpty から isDefined に変わっています。
つまり 3.0 では nullや空文字列 の場合に上書きされていましたが、3.1 では上書きされません。

Ext.applyIf は クラスの継承の際によくつかわれる関数ですので、注意が必要です。

http://www.extjs.com/products/extjs/CHANGES_ext-3.1.0.htmlにも載っていない気が...