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 引用, 而是完全新创建了一个一模一样的对象.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值