Dojo 扩展 javascript 核心库 - 组合, 结构化与复制对象

写 Javascript 程序的时候, 可能会经常把一个对象的属性复制到另一个对象中, Dojo 定义了一些简化这些操作


1. 混合对象

dojo.mixin(destinationObj, srcObj1, srcObj2, ...)

这种复制是通过赋值操作来完成的( = ), 因此对于数字, 布尔, 字符串基本数据类型是按值复制, 其它类型则是按引用复制.

如果 srcObj 中的属性名与 destinationObj 中的属性名重复, 则 srcObj 中属性的值会覆盖 destinationObj 对应的属性值, 

如果多个srcObj 中有相同的一个属性, 其值取最右边的 srcObj.prop 的值.

例1:

var destinationObj = {
	name: "javascript"
};
dojo.mixin(destinationObj, {name: "dojo"});
console.log(destinationObj.name); // Output: dojo

dojo.mixin(destinationObj, {name: "dojo"}, {name: "dojo 1.7"});
console.log(destinationObj.name); // Output: dojo 1.7

例2( dojo.mixin 会把 srcObj prototype chain 中所有对象的属性都混合到 destinationObj 中, Object.protoytpe 中属性除外 ):
function SrcObj() {} // constructor

var protoObj = {
	name: "prototype's prop"
};

SrcObj.prototype = protoObj;

var destinationObj = {
	name: "javascript"
};

dojo.mixin(destinationObj, new SrcObj());
console.log(destinationObj.name); // Output: prototype's prop
可以看到把 SrcObj.prototype.name 混合到 destinationObj 中, 并覆盖了 name


2. 复制对象

上面的方法只有 数字, 布尔, 字符串这种基本数据类型是按值复制的, 其它类型都复制的引用, 如果想要把所有类型都按值复制, 就要用到下面的方法.

dojo.clone( srcObj )

例:

var kingdomsOfDiscovery = {
	city: "Dalian",
	country: "China"
};
var attraction = {
	name: "Dalian Discoveryland Theme Park",
	location: kingdomsOfDiscovery
};

var testClone = dojo.clone(attraction);

上面的代码把 attraction 克隆到 testClone 变量中, testClone 中有一个新的, 独立的, 但是是匿名的 kingdomsOfDiscovery 对象.

不是像 dojo.mixin 方法一样, 只是复制了对 kingdomsOfDiscovery 引用, 而是完全新创建了一个一模一样的对象.



你可能感兴趣的:(Dojo 扩展 javascript 核心库 - 组合, 结构化与复制对象)