apply的用法:
Ext中apply及applyIf方法的應用
apply及applyIf方法都是用於實現把一個對象中的屬性應用於另外一個對象中,相當於屬性拷貝。
不同的是apply將會覆蓋目標對象中的屬性,而applyIf只拷貝目標對象中沒有而源對象中有的屬性。
apply方法的簽名為“apply( Object obj, Object config, Object defaults ) : Object”,
該方法包含三個參數,第一個參數是要拷貝的目標對象,第二個參數是拷貝的源對象,第三個參數是可選的,表示給目標對象提供一個默認值。可以簡單的理解成把第三個參數(如果有的話)及第二個參數中的屬性拷貝給第一個參數對象。看下面的代碼:
var b1={ p1:"p1 value", p2:"p2 value", f1:function(){alert(this.p2)}};
var b2=new Object();
b2.p2="b2 value";
Ext.apply(b2,b1);b2.f1();
在上面的代碼中,Ext.apply(b2,b1)這一語句把b1的屬性拷貝到了b2對象中,因此調用b2的f1方法可以彈出"p2 value"的提示信息。盡管b2對象已經包含了p2屬性值,但拷貝后該屬性值會被覆蓋。可以在調用apply方法時,在第三個參數中指定拷貝屬性的默認值,比如下面的代碼:
Ext.apply(b2,b1,{p3:"p3 value"});
alert(b2.p3);
這樣會使得b2中包含一個p3的屬性,值為"p3 value"。
applyIf方法的功能跟apply一樣,只是不會拷貝那些在目標對象及源對象都存在的屬性。比如把前面演示apply方法的代碼改成applyIf,
如下:
Ext.applyIf(b2,b1);b2.f1();
由於b2中已經存在了p2屬性,因此,b2.f1()方法中引用this.p2的時候,得到的是"b2 value",而不是在b1中定義的"p2 value"。