Ext中apply及applyIf方法的应用:
apply及applyIf方法都是用于实现把一个对象中的属性应用于另外一个对象中,相当于属性拷贝。
不同的是apply将会覆盖目标对象中的属性,而applyIf只拷贝目标对象中没有而源对象中有的属性。
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;
};
该方法包含三个参数,第一个参数是要拷贝的目标对象,第二个参数是拷贝的源对象,第三个参数是可选的,表示给目标对象提供一个默认值。可以简单的理解成把第三个参数(如果有的话)及第二个参数中的属性拷贝给第一个参数对象。
applyIf方法的功能跟apply一样,只是不会拷贝那些在目标对象及源对象都存在的属性。
applyIf源码:
applyIf : function(o, c){
if(o){
for(var p in c){
if(Ext.isEmpty(o[p])){
o[p] = c[p];
}
}
}
return o;
},
示例代码:
Ext.onReady(function() {
var obj1 = {
param1 : "p1",
param2 : "p2",
param3 : function() {
alert(this.param2)
}
};
var obj2 = new Object();
obj2.param2 = "b2";
//applyIf
Ext.applyIf(obj2, obj1, {param4 : "p4"});
obj2.param3();
//apply
Ext.apply(obj2, obj1, {param4 : "p4"});
obj2.param3();
}, this)
执行结果先弹出b2再弹出p2.
本文详细介绍了Ext库中的apply及applyIf方法,包括它们的功能、使用方式及示例代码。通过对比分析,阐述了这两个方法在对象属性拷贝时的不同行为。
123

被折叠的 条评论
为什么被折叠?



