วานิลลา JS:
คำตอบของ @ evanดูดีที่สุดที่นี่ Just (ab) ใช้ JSON.parse / stringify เพื่อทำสำเนาของวัตถุอย่างมีประสิทธิภาพ
console.log(JSON.parse(JSON.stringify(test)));
โซลูชั่นเฉพาะของ JQuery:
คุณสามารถสร้างสแน็ปช็อตของวัตถุ ณ เวลาใดเวลาหนึ่งด้วย jQuery.extend
console.log($.extend({}, test));
สิ่งที่เกิดขึ้นจริงที่นี่คือ jQuery กำลังสร้างวัตถุใหม่ที่มีtest
เนื้อหาของวัตถุและบันทึกว่า (ดังนั้นจะไม่เปลี่ยนแปลง)
โซลูชั่นเฉพาะของ AngularJS (1):
Angular จัดให้มีcopy
ฟังก์ชันที่สามารถใช้เอฟเฟกต์เดียวกันได้:angular.copy
console.log(angular.copy(test));
ฟังก์ชั่น wrapper วานิลลา JS:
นี่คือฟังก์ชันที่ล้อมรอบconsole.log
แต่จะทำสำเนาของวัตถุใด ๆ ก่อนออกจากระบบ
ฉันเขียนสิ่งนี้เพื่อตอบสนองต่อฟังก์ชั่นที่คล้ายกัน แต่มีประสิทธิภาพน้อยกว่าในคำตอบ รองรับหลายอาร์กิวเมนต์และจะไม่พยายามคัดลอกสิ่งต่าง ๆ หากไม่ใช่วัตถุปกติ
function consoleLogWithObjectCopy () {
var args = [].slice.call(arguments);
var argsWithObjectCopies = args.map(copyIfRegularObject)
return console.log.apply(console, argsWithObjectCopies)
}
function copyIfRegularObject (o) {
const isRegularObject = typeof o === 'object' && !(o instanceof RegExp)
return isRegularObject ? copyObject(o) : o
}
function copyObject (o) {
return JSON.parse(JSON.stringify(o))
}
ตัวอย่างการใช้งาน :consoleLogWithObjectCopy('obj', {foo: 'bar'}, 1, /abc/, {a: 1})