في JavaScript ، يتم تمرير جميع المهام بين متغيرات الكائن من خلال العناوين. قد يسأل بعض الطلاب عن الكائنات. قد يكون من الأفضل إعطاء مثال:
نسخة الكود كما يلي:
typeof (صواب) // "منطقية"
typeof (1) // "الرقم"
typeof ("1") // "سلسلة"
typeof ({}) // "كائن"
typeof ([]) // "كائن"
typeof (null) // "كائن"
typeof (function () {}) // "function"
في الواقع ، فإن الكائن الذي نحتاجه للتعامل مع النسخ المتعمق هو كائن الكائن ، ويتم تعيين الكائنات غير الكائنات مباشرة وعادة ما. فكرتي في تنفيذ النسخ المتماثل العميق لـ JS هي:
تكرار من خلال جميع خصائص هذا الكائن ،
إذا كان الخاصية "كائن" ، فستكون المعالجة الخاصة مطلوبة.
إذا كان كائن الكائن هذا مميزًا وهو صفيف ، فقم بإنشاء صفيف جديد ونسخ العناصر في الصفيف بعمق.
إذا كان كائن الكائن هذا كائنًا غير وارن ، فما عليك سوى الاتصال بطريقة النسخ العميقة بشكل متكرر عليها.
إذا لم يكن "كائن" ، فقط انسخه بشكل طبيعي.
ها هو تنفيذي:
نسخة الكود كما يلي:
Object.prototype.deepcopy = function () {
var obj ، i ؛
OBJ = {} ؛
لـ (attr in this) {
if (this.hasownproperty (attr)) {
if (typeof (هذا [attr]) === "كائن") {
if (هذا [attr] === null) {
OBJ [attr] = null ؛
}
آخر if (object.prototype.toString.call (هذا [attr]) === '[كائن صفيف]') {
OBJ [attr] = [] ؛
لـ (i = 0 ؛ i <this [attr] .length ؛ i ++) {
obj [attr] .push (هذا [attr] [i] .deepcopy ()) ؛
}
} آخر {
OBJ [attr] = this [attr] .deepcopy () ؛
}
} آخر {
obj [attr] = هذا [attr] ؛
}
}
}
إرجاع OBJ ؛
} ؛
إذا كان المتصفح يدعم ECMASCRIPT 5 ، فيمكنك استخدامه من أجل نسخ جميع ميزات خصائص الكائن بعمق
نسخة الكود كما يلي:
Object.DefineProperty (obj ، attr ، object.getOntOndRypropertyDescriptor (this ، attr)) ؛
لاستبدال
نسخة الكود كما يلي:
obj [attr] = هذا [attr] ؛
ميزة تنفيذ هذه الطريقة مباشرة على الكائن. النمط النمط هو أن جميع الكائنات ترث الطريقة. العيب هو أن بعض المكتبات ستعيد كتابة كائنات الكائنات ، لذلك تحدث في بعض الأحيان. هذا يحتاج إلى الانتباه إلى. طريقة الاستخدام المحددة هي كما يلي:
نسخة الكود كما يلي:
Object.prototype.deepcopy = function () {...}
var a = {x: 1} ؛
var b = a ؛
var c = a.deepcopy () ؛
الفأس = 2 ؛
bx = 3 ؛
console.log (ax) ؛ // 3
console.log (bx) ؛ // 3
console.log (cx) ؛ // 1
ما سبق هو شرح حول النسخ المتماثل العميق. ومع ذلك ، نظرًا لأننا تحدثنا عن النسخ المتماثل العميق اليوم ، فإننا نريد أن يكون لدينا تكرار ضحل في المقابل. دعونا نلخص بإيجاز أوجه التشابه والاختلاف بينهما.
نسخة ضحلة (Shadow Cloning): فقط انسخ النوع الأساسي للكائن ونوع الكائن لا يزال ينتمي إلى المرجع الأصلي.
نسخة عميقة (استنساخ عميق): لا ينسخ الفئة الأساسية للكائن ، ولكن أيضًا يقوم بنسخ الكائنات في الكائن الأصلي. وهذا يعني ، يتم إنشاؤه بالكامل بواسطة الكائن الجديد.