apply方法的签名为“apply( Object obj, Object config, Object defaults ) : Object”,
第一个参数是要拷贝的目标对象,
第二个参数是拷贝的源对象,
第三个参数是可选的,表示给目标对象提供一个默认值。
可以简单的理解成把第三个参数(如果有的话)及第二个参数中的属性拷贝给第一个参数对象。
Ext源代码如下:
- /**
- * Copies all the properties of config to obj.
- * @param {Object} obj The receiver of the properties
- * @param {Object} config The source of the properties
- * @param {Object} defaults A different object that will also be applied for default values
- * @return {Object} returns obj
- * @member Ext apply
- */
- Ext.apply = function (o, c, defaults){
- // no "this" reference for friendly out of scope calls
- if (defaults){
- Ext.apply(o, defaults);
- }
- if (o && c && typeof c == 'object' ){
- for ( var p in c){
- o[p] = c[p];
- }
- }
- return o;
- };
另外还有ext.applyif 也是对象克隆,不同的是,克隆的对象并不会覆盖原有属性和方法
具体代码如下:
- applyIf : function (o, c){
- if (o){
- for ( var p in c){
- if (!Ext.isDefined(o[p])){
- o[p] = c[p];
- }
- }
- }
- return o;
- },