码迷,mamicode.com
首页 > 移动开发 > 详细

extjs中apply和applyIf的用法

时间:2015-05-18 00:52:23      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

本文导读:extjs中apply及applyIf方法都是用于把一个对象中的属性复制到另外一个对象的属性中,相当于属性拷贝。不同的是apply将会覆盖目标对象中的属性,而applyIf只拷贝目标对象中没有,而源对象中有的属性。

apply

 

方法的签名

apply( Object obj, Object config, Object defaults ) : Object

参数说明

第一个参数是要复制的目标对象;第二个参数是复制的源对象;第三个参数是默认源对象,第三个参数是可选的,意味着如果第三个参数有值,则将第三个参数也复制到目标对象中

 apply定义的源代码

 
JScript 代码   复制
技术分享技术分享
Ext.apply = function(object, config, defaults) {
技术分享        if (defaults) {
技术分享            Ext.apply(object, defaults);
技术分享        }
技术分享        if (object && config && typeof config === ‘object‘) {
技术分享            var i, j, k;
技术分享            for (i in config) {//复制所有属性
技术分享                object[i] = config[i];
技术分享            }
技术分享            if (enumerables) {
技术分享                for (j = enumerables.length; j--;) {
技术分享                    k = enumerables[j];
技术分享                    if (config.hasOwnProperty(k)) {
技术分享                        object[k] = config[k];
技术分享                    }
技术分享                }
技术分享            }
技术分享        }
技术分享            return object;
技术分享};

技术分享

apply实例

 下面的代码中,Ext.apply(b2,b1)这一语句把b1的属性拷贝到了b2对象中,因此调用b2的f1方法可以弹出"p2 value"的提示信息。尽管b2对象已经包含了p2属性值,但拷贝后该属性值会被覆盖。
 
JScript 代码   复制
技术分享技术分享
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();
技术分享

可以在调用apply方法时,在第三个参数中指定拷贝属性的默认值,比如下面的代码

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

alert(b2.p3);

这样会使得b2中包含一个p3的属性,值为"p3 value"。

 

applyIf

功能跟apply一样,只是不会拷贝那些在目标对象及源对象都存在的属性。

定义的源代码

 
JScript 代码   复制
技术分享技术分享
applyIf: function(object, config) {
技术分享            var property;
技术分享            if (object) {
技术分享                for (property in config) {
技术分享                    if (object[property] === undefined) {//如果object中不含有这个属性,复制属性,否则不复制
技术分享                        object[property] = config[property];
技术分享                    }
技术分享                }
技术分享            }
技术分享            return object;
技术分享        },

applyIf实例:

比如把前面演示apply方法的代码改成applyIf,如下:

Ext.applyIf(b2,b1);b2.f1();

由于b2中已经存在了p2属性,因此,b2.f1()方法中引用this.p2的时候,得到的是"b2 value",而不是在b1中定义的"p2 value"。

extjs中apply和applyIf的用法

标签:

原文地址:http://www.cnblogs.com/Crow00/p/4510870.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!