Ext.apply 与 Ext.applyIf

February 1st, 2010 | Author: JavaChen | Categories: ExtJs | Tags:

Ext.apply是整个ExtJs框架当中很重要的一个方法,Ext是一个对象,也可以说是一个Ext命名空间,在Extjs 3.0 ext-base.js中,Ext是如下定义的:
Ext = {
version : ‘3.0′
};

该对象初始化时有个version 属性,标注ExtJs框架的版本号。

apply及applyIf方法都是用于实现把一个对象中的属性应用于另外一个对象中,相当于属性拷贝。不同的是apply将会覆盖目标对象中的属性,而applyIf只拷贝目标对象中没有而源对象中有的属性。
apply方法的签名为“apply( Object obj, Object config, Object defaults ) : Object”,该方法包含三个参数,第一个参数是要拷贝的目标对象,第二个参数是拷贝的源对象,第三个参数是可选的,表示给目标对象提供一个默认值。可以简单的理解成把第三个参数(如果有的话)及第二个参数中的属性拷贝给第一个参数对象。
applyIf( Object obj, Object config ) : Object
从config拷贝所有属性至obj(如果obj未定义相应属性)

以下是其源代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//提供了defaults参数,说明在继承父对象之前,可以先为子对象初始化一些方法或属性
Ext.apply = function(o, c, defaults) {
	if (defaults)
		Ext.apply(o, defaults);
	if (o && c && typeof c == 'object') {
		//将父对象中的属性复制到子对象
		for (var p in c) {
			o[p] = c[p];
		}
	}
	return o;
};
 
applyIf : function(o, c) {
	if (o) {
		for (var p in c) {
			//如果子对象中未定义属性,则将父对象的属性拷到子对象
			if (Ext.isEmpty(o[p])) {
				o[p] = c[p];
			}
		}
	}
	return o;
}
No comments yet.
:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)