Dojo拡張javascriptコアライブラリ-組み合わせ、構造化と複製オブジェクト

1886 ワード

Javascriptプログラムを書く時、一つのオブジェクトの属性を他のオブジェクトにコピーすることが多いかもしれません.Dojoはこれらの操作を簡略化しました.
1.混合オブジェクト
dojo.mixin(destination Obj,srccebj 1,srcceObj 2,…)
このコピーは値付け操作によって行われます.したがって、数字、ブール、文字列ベースのデータタイプは値でコピーされます.他のタイプは参照でコピーされます.
srcuObjの属性名がdestination Objの属性名と重複すると、srccebjの属性の値はdestination Objに対応する属性値をカバーし、 
複数のSrcurObjの中に同じ属性がある場合、その値は一番右側のSrcurObj.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は、srccebj prototype chainのすべてのオブジェクトの属性をdestination Objに混合し、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
SrcurObj.prototype.nameをdestination Objに混ぜてnameをカバーしているのが見えます.
2.コピー対象
上記の方法は数字、ブール、文字列という基本的なデータタイプが値でコピーされています.他のタイプはすべて値でコピーしたい場合、次の方法が必要です.
dojo.clone(srcebj)
例:
var kingdomsOfDiscovery = {
	city: "Dalian",
	country: "China"
};
var attraction = {
	name: "Dalian Discoveryland Theme Park",
	location: kingdomsOfDiscovery
};

var testClone = dojo.clone(attraction);
上のコードはtestClone変数にアトラクションをクローンしました.testCloneには新しいものがあります.独立していますが、匿名のkingdomsOfDisccoveryオブジェクトです.
dojo.mixinのような方法ではなく、コピーしただけです. kingdomsOf Disccoveryは引用する代わりに、全く同じオブジェクトを新規に作成しました.