【发布时间】:2017-09-25 03:22:48
【问题描述】:
我有一个deepClone 函数,我在整个程序中都使用它来克隆一个对象的所有属性和值并返回克隆的对象(参见下面的代码)。我现在想在对象中包含一个audioBuffer 并将其成功复制到返回的对象中。有没有办法修改功能以包含此功能?
注意:并非所有传递给deepClone 函数的对象都包含audioBuffer,因此它应该能够处理并成功克隆有和没有它们的对象。
编辑:有人能想出一种方法将JSON.parse(JSON.stringify(object)) 与作为答案之一提供的解决方案结合起来吗? IE。在克隆发生时检查对象的属性,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);
从代码 sn-p 中可以看出,clonedTrack 的trackBuffer 被转换为一个空对象,这是JSON.parse(JSON.stringify(object)); 所期望的。
修改deepClone 以成功克隆audioBuffer 但保留现有功能的最佳方法是什么?
任何帮助将不胜感激,谢谢!
【问题讨论】:
标签: javascript clone web-audio-api audiobuffer