開発中、オブジェクト間の参照関係を中断し、コピーを残したいだけであることは避けられません。
JavaScriptでは、簡単な方法は、JSON関数を使用してオブジェクトを文字列に弦楽化し、新しいオブジェクトに解析することです。オンラインでコードを検索するか、オープンソースコミュニティにはまだ多くのクローンコードがあります。
コードは見つかりますが、物事は常に他の人のものであり、学習コードは常に不変のトピックになります。
私は自分で2つのクローン機能を書きました:
クローン:継承されたプロパティは含まれないカスタムオブジェクトの独自のプロパティをクローンします。プロパティは、基本的なデータ型と配列にすることができます。カスタムオブジェクトをカスタマイズできます。属性名のリストをクローンに策定できます。
clonearray:配列をクローンすると、配列内の要素はオブジェクト、基本的なタイプです。
コードコピーは次のとおりです。
//最初のパラメーターはクローンされたオブジェクトであり、2番目のパラメーターはクローン化する必要がある属性リストです
関数cloneown(){
var obj = arguments [0];
if(typeof obj === '未定義' || obj === null)
戻る {};
if(typeof obj!== 'object')
OBJを返します。
// 2番目のパラメーターは属性名リストですので、このリストを使用して選択します
//それ以外の場合、すべての属性がクローン化されます
var attrs = arguments [1];
var enable_spec_attr = true;
if(!(attrs instanceof array)){
//console.log(attrs);
attrs = obj;
enable_spec_attr = false;
}
var result = {};
var i;
for(私は属性){
attr = enable_spec_attr? attrs [i]:i;
//console.log(attr);
if(obj.hasownproperty(attr)){
if(obj [attr] instance of array){
result [attr] = clonearray(obj [attr]);
}
else if(typeof obj [attr] === 'object'){
result [attr] = cloneown(obj [attr]);
} それ以外 {
result [attr] = obj [attr];
}
}
}
返品結果;
}
コードコピーは次のとおりです。
//配列をクローンします
function clonearray(array){
if(typeof array === 'undefined' || array === null)
戻る [];
if(!(配列の配列インスタンス)))
戻る [];
結果= [];
var i;
for(i in array){
if(typeof array [i]!== 'object'){
result [i] = array [i];
続く;
}
//クローンオブジェクト
result [i] = cloneown(array [i]);
}
返品結果;
}
電話
1.定期的にカスタムオブジェクトをクローンします:
コードコピーは次のとおりです。
var a = {
名前:「フランク」、
年齢:20
};
var b = cloneown(a);
2。クローン化されたプロパティを指定します
コードコピーは次のとおりです。
var a = {
名前:「フランク」、
年齢:20、
住所:「どこでも」
};
var b = cloneowne(a、['name'、 'age']);
3.配列属性を含むカスタムオブジェクトをクローンします
コードコピーは次のとおりです。
var a = {
名前: 'kxh'、
年齢:20、
本:['hai'、 'ho'、 'ali']、
いいね:[
{wname: 'kaili'、賃金:81、fav: "aaaaa"}、
{wname: 'seli'、賃金:82、fav: "bbb"}、
{wname: 'ailun'、賃金:83、fav: "ccc"}、]
};
var b = cloneowne(a);
4.カスタムオブジェクトを使用して配列をクローンします
コードコピーは次のとおりです。
var a = [
{
名前:「フランク」、
年齢:20
}、
{
名前:「レオン」、
年齢:30
}
];
var b = clonearray(a);
データタイプなど、組み込みのオブジェクトのクローニングなど、上記のコードにはまだ多くの問題があります。
問題は管理されており、そのような学習プロセスも行われなければなりません。