Ext 核心 API -- Ext.apply 與 Ext.applyIf

Ext中apply及applyIf方法的應用
 
        apply及applyIf方法都是用於實現把一個對象中的屬性應用於另外一個對象中,相當於屬性拷貝。不同的是apply將會覆蓋目標對象中的屬性,而applyIf只拷貝目標對象中沒有而源對象中有的屬性。
apply方法的簽名爲“apply( Object obj, Object config, Object defaults ) : Object”,該方法包含三個參數,第一個參數是要拷貝的目標對象,第二個參數是拷貝的源對象,第三個參數是可選的,表示給目標對象提供一個默認值。可以簡單的理解成把第三個參數(如果有的話)及第二個參數中的屬性拷貝給第一個參數對象。看下面的代碼:

    <script>

       Ext.onReady(function(){

           var b1 = {

              p1:"p1 value",

             

              p2:"p2 value",

             

              f1:function(){alert(this.p1)},

             

              f2:function(){alert(this.p2)}

           };

          

           var b2 = new Object();

          

           b2.p1 = "b2 value";

          

           Ext.apply(b2,b1);

          

           b2.f1(); // 這個挺有意思,不僅屬性會複製,連b1中的f1方法也可以被複制和使用

// ( 有點費話,因爲f1和f2就是以屬性的形式生命的 )

          

           b2.f2();

          

//會使得b2中包含一個p3的屬性,值爲"p3 value"。

           Ext.apply(b2,b1,{p3:"p3 value"});

 

      

           alert(b2.p3)     

 

       });

    </script>

在上面的代碼中,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"。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章