zoukankan      html  css  js  c++  java
  • 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();风之境地 java-javascript 蘑菇街女装
    由于b2中已经存在了p2属性,因此,b2.f1()方法中引用this.p2的时候,得到的是"b2 value",而不是在b1中定义的"p2 value"。
  • 相关阅读:
    CentOS6 图形界面'Basic server'条件下的(gnome)安装 .
    2013年 2月 春节期间 CgyWin 安装总结
    网络爬虫比较
    如何将nutch项目加载到MyEclipse中,生成一个web project
    读过的书
    NBearLite 用MsAccess数据库时 Count() 的错误(BUG?)
    测试Windows Live Writer
    VS2005 编辑器配色
    事务处理
    MVC MvcApplication 中在.CS文件(CodeBehide)中找不到服务器控件的解决办法
  • 原文地址:https://www.cnblogs.com/sky7034/p/2042962.html
Copyright © 2011-2022 走看看