ในระหว่างการพัฒนามันเป็นสิ่งที่หลีกเลี่ยงไม่ได้ที่คุณสามารถขัดจังหวะความสัมพันธ์อ้างอิงระหว่างวัตถุและเพียงต้องการทิ้งสำเนา
ใน JavaScript วิธีการง่าย ๆ คือการใช้ฟังก์ชัน JSON เพื่อ stringify วัตถุลงในสตริงแล้วแยกวิเคราะห์เป็นวัตถุใหม่ การค้นหารหัสออนไลน์ทั้งยังมีรหัสโคลนจำนวนมากในชุมชนโอเพ่นซอร์ส
แม้ว่าจะพบรหัส แต่สิ่งต่าง ๆ มักจะเป็นของคนอื่นและรหัสการเรียนรู้จะเป็นหัวข้อที่ไม่เปลี่ยนแปลงเสมอ
ฉันเขียนสองฟังก์ชั่นโคลนด้วยตัวเอง:
Cloneown: โคลนคุณสมบัติของตัวเองของวัตถุที่กำหนดเองซึ่งไม่รวมคุณสมบัติที่สืบทอดมา คุณสมบัติอาจเป็นชนิดข้อมูลและอาร์เรย์พื้นฐาน วัตถุที่กำหนดเองสามารถปรับแต่งได้ คุณสามารถกำหนดรายการชื่อแอตทริบิวต์เป็นโคลน
Clonearray: โคลนอาเรย์องค์ประกอบในอาร์เรย์สามารถเป็นวัตถุประเภทพื้นฐาน
การคัดลอกรหัสมีดังนี้:
// พารามิเตอร์แรกคือวัตถุโคลนและพารามิเตอร์ที่สองคือรายการแอตทริบิวต์ที่ต้องโคลน
ฟังก์ชั่น cloneown () {
var obj = อาร์กิวเมนต์ [0];
if (typeof obj === 'undefined' || obj === null)
กลับ {};
if (typeof obj! == 'Object')
คืน OBJ;
// พารามิเตอร์ที่สองคือรายการชื่อแอตทริบิวต์ดังนั้นให้ใช้รายการนี้เพื่อเลือก
// มิฉะนั้นคุณลักษณะทั้งหมดจะถูกโคลน
var attrs = อาร์กิวเมนต์ [1];
var enable_spec_attr = true;
if (! (attrs อินสแตนซ์ของอาร์เรย์)) {
//console.log(attrs);
attrs = obj;
enable_spec_attr = false;
-
var result = {};
var i;
สำหรับ (ฉันอยู่ใน attrs) {
attr = enable_spec_attr? attrs [i]: ฉัน;
//console.log(attr);
if (obj.hasownproperty (attr)) {
ถ้า (OBJ [attain] อินสแตนซ์ของอาร์เรย์) {
ผลลัพธ์ [attr] = clonearray (obj [attr]);
-
อื่นถ้า (typeof obj [attt] === 'object') {
ผลลัพธ์ [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 = {
ชื่อ: 'Frank',
อายุ: 20
-
var b = cloneown (a);
2. ระบุคุณสมบัติที่โคลน
การคัดลอกรหัสมีดังนี้:
var a = {
ชื่อ: 'Frank',
อายุ: 20,
ที่อยู่: 'ใดก็ได้'
-
var b = cloneowne (a, ['ชื่อ', 'อายุ']);
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 = [
-
ชื่อ: 'Frank',
อายุ: 20
-
-
ชื่อ: 'Leon',
อายุ: 30
-
-
var b = clonearray (a);
ยังมีปัญหามากมายเกี่ยวกับรหัสข้างต้นเช่นการโคลนนิ่งของวัตถุในตัวเช่นประเภท datatime
มีการจัดการปัญหาและกระบวนการเรียนรู้ดังกล่าวจะต้องทำเช่นกัน