أثناء التطوير ، من المحتم أن تتمكن من مقاطعة العلاقة المرجعية بين الكائنات وترغب فقط في ترك نسخة.
في JavaScript ، تتمثل الطريقة البسيطة في استخدام وظيفة JSON لتلقي الكائن في سلسلة ، ثم تحليلها في كائن جديد. إما البحث عن الكود عبر الإنترنت ، لا يزال هناك الكثير من الرموز المستنسخة في مجتمع المصدر المفتوح.
على الرغم من أنه يمكن العثور على الكود ، إلا أن الأمور تكون دائمًا شخص آخر ، وستكون رموز التعلم دائمًا موضوعًا لا يتغير.
كتبت وظيفتين مستنسختين بنفسي:
استنساخ: استنساخ الخصائص الخاصة لكائن مخصص ، والتي لا تتضمن خصائص ورثية. يمكن أن تكون الخصائص أنواع البيانات الأساسية والصفائف. يمكن تخصيص الكائنات المخصصة. يمكنك صياغة قائمة بأسماء السمات لاستنساخ.
Clonearray: استنساخ صفيف ، يمكن أن تكون العناصر الموجودة في الصفيف كائنات ، وأنواع أساسية.
نسخة الكود كما يلي:
// المعلمة الأولى هي الكائن المستنسخ ، والمعلمة الثانية هي قائمة السمات التي يجب استنساخها
وظيفة cloneown () {
var obj = وسيطات [0] ؛
if (typeof obj === 'undefined' || obj === null)
يعود {}؛
إذا (typeof obj! == 'كائن')
إرجاع OBJ ؛
// المعلمة الثانية هي قائمة اسم السمة ، لذا استخدم هذه القائمة لتحديد
// خلاف ذلك ، سيتم استنساخ جميع السمات
var attrs = وسيطات [1] ؛
var enable_spec_attr = true ؛
if (! (attrs eastyof array)) {
//console.log(Attrs) ؛
attrs = obj ؛
enable_spec_attr = false ؛
}
var result = {} ؛
var i ؛
ل (أنا في attrs) {
attr = enable_spec_attr؟ attrs [i]: i ؛
//console.log(attr) ؛
if (obj.hasownproperty (attr)) {
if (OBJ [attr] مثيل Array) {
النتيجة [attr] = clonearray (obj [attr]) ؛
}
آخر إذا (typeof obj [attr] === 'Objec
النتيجة [attr] = cloneown (obj [attr]) ؛
} آخر {
النتيجة [attr] = obj [attr] ؛
}
}
}
نتيجة العودة
}
نسخة الكود كما يلي:
// استنساخ المصفوفة
وظيفة clonearray (صفيف) {
if (typeof array === 'undefined' || Array === NULL)
يعود []؛
إذا (! (مثيل صفيف الصفيف)))
يعود []؛
النتيجة = [] ؛
var i ؛
ل (أنا في صفيف) {
if (typeof array [i]! == 'Object') {
النتيجة [i] = صفيف [i] ؛
يكمل؛
}
// كائن استنساخ
النتيجة [i] = cloneown (صفيف [i]) ؛
}
نتيجة العودة
}
يتصل
1. استنساخ كائنات مخصصة بانتظام:
نسخة الكود كما يلي:
var a = {
الاسم: "فرانك" ،
العمر: 20
} ؛
var b = cloneown (a) ؛
2. حدد الخصائص المستنسخة
نسخة الكود كما يلي:
var a = {
الاسم: "فرانك" ،
العمر: 20 ،
العنوان: "أي مكان"
} ؛
var b = cloneowne (a ، ['name' ، 'age']) ؛
3. ضع كائن مخصص يحتوي على سمات صفيف
نسخة الكود كما يلي:
var a = {
الاسم: 'kxh' ،
العمر: 20 ،
الكتب: ["هاي" ، "هو" ، "علي"] ،
الإعجابات: [
{wname: 'kaili' ، الأجر: 81 ، FAV: "aaaaa"} ،
{wname: 'seli' ، الأجور: 82 ، FAV: "BBB"} ،
{wname: 'ailun' ، الأجر: 83 ، FAV: "CCC"} ،]
} ؛
var b = cloneowne (a) ؛
4.clone المصفوفة بالكائنات المخصصة
نسخة الكود كما يلي:
var a = [
{
الاسم: "فرانك" ،
العمر: 20
} ،
{
الاسم: "ليون" ،
العمر: 30
}
] ؛
var b = clonearray (a) ؛
لا تزال هناك العديد من المشكلات في الكود أعلاه ، مثل استنساخ الكائنات المدمجة ، مثل نوع Datatime.
تتم إدارة المشكلات ، ويجب أيضًا القيام بعملية التعلم هذه.