GC用にガベージを作らないextendDeep()関数を作りたいです。
ガベージ コレクタは、できるだけ非アクティブにする必要があります。参照: https://www.scirra.com/blog/76/how-to-write-low-garbage-real-time-javascript
これは、変更したいextendDeep()関数です。
function extendDeep(parent, child) {
var i, toStr = Object.prototype.toString,
astr = "[object Array]";
child = child || {};
for (i in parent) {
if (parent.hasOwnProperty(i)) {
if (typeof parent[i] === 'object') {
child[i] = (toStr.call(parent[i]) === astr) ? [] : {};
extendDeep(parent[i], child[i]);
} else {
child[i] = parent[i];
}
}
}
return child;
}
関数は何も返す必要はありません。返されたオブジェクトがガベージが作成される理由であるためです。
親オブジェクトのすべてのプロパティが参照 (オブジェクトの再利用) によって利用可能であると想定されます。