我有一个deepClone
在整个程序中使用的函数,它克隆一个对象的所有属性和值并返回克隆的对象(参见下面的代码)。我现在想audioBuffer
在对象中包含一个并成功地将其复制到返回的对象中。有没有办法修改功能以包含此功能?
注意:并非所有传递给deepClone
函数的对象都包含一个audioBuffer
,因此它应该能够处理并成功克隆有和没有它们的对象。
编辑:有人能想出一种方法来结合JSON.parse(JSON.stringify(object))
作为答案之一提供的解决方案吗?即在克隆发生时检查对象的属性,将其克隆if (property == 'trackBuffer')
到与其他对象不同的位置?
deepClone
功能:
function deepClone (object) {
return JSON.parse(JSON.stringify(object));
};
/**
* Utility function for deep object cloning
*
* @param {object} obj Object to be cloned
* @returns {object} The deep-cloned object
*/
function deepClone (object) {
return JSON.parse(JSON.stringify(object));
};
// Create audio context
var context = new AudioContext();
// Create empty audio buffer
var audioBuffer = context.createBuffer(2, 22050, 44100);
// Create object to be cloned
var track = {
prop1: "val1",
prop2: "val2",
trackBuffer: audioBuffer
};
// Log before clone
console.log("before clone, track: \n", track);
// Clone track
var clonedTrack = deepClone(track);
// Log after clone
console.log("after clone, clonedTrack: \n", clonedTrack);
正如您从代码片段中看到的那样,clonedTrack
'trackBuffer
被转换为预期来自JSON.parse(JSON.stringify(object));
.
修改deepClone
以成功克隆audioBuffer
但保留现有功能的最佳方法是什么?
任何帮助将不胜感激,谢谢!