У меня есть эта функция для создания объектов в WinJS:как правильно клонировать объект в WinJS
function BiometricSignatureData() {
this.averageSpeed = "";
this.pressure = new Array();
this.location = new Array();
this.timestamp = new Array();
this.speed = new Array();
this.evt = new Array();
this.spaces = 0;
this.attackPoints = 0;
this.finalPoints = 0;
this.signatureAddress = "";
this.restartObject =
function() {
this.pressure = new Array();
this.location = new Array();
this.timestamp = new Array();
this.averageSpeed = "";
this.speed = new Array();
this.evt = new Array();
this.spaces = 0;
this.attackPoints = 0;
this.finalPoints = 0;
this.signatureAddress = "";
}
this.printBiometricValuesOnRealTime =
function (pressure, location, averageSpeed, spaces, attackPoints, finishPoints) {
pressure.value = this.pressure[this.pressure.length -1];
location.value = "{" + this.location[this.location.length - 1] + "}";
averageSpeed.value = this.averageSpeed;
spaces.value = this.spaces;
attackPoints.value = this.attackPoints;
finishPoints.value = this.finalPoints;
}
}
Основном создает объекты BiometricSignatureData типа с 2-мя методами
- restartObject
- printBiometricValuesOnRealTime
, а затем я создал два экземпляра одного и того же объекта
var biometricObject = new BiometricSignatureData();
var biometricObjectBackup = new BiometricSignatureData();
мой первый экземпляр (biometricObject) заполняется данными, то я хочу, чтобы клонировать (а не по ссылке) этот экземпляр в моей второй инстанции (biometricObjectBackup), делая это:
function cloneObject(from, to) {// extends 'from' object with members from 'to'. If 'to' is null, a deep clone of 'from' is returned
if (from == null || typeof from != "object") return from;
if (from.constructor != Object && from.constructor != Array) return from;
if (from.constructor == Date || from.constructor == RegExp || from.constructor == Function ||
from.constructor == String || from.constructor == Number || from.constructor == Boolean)
return new from.constructor(from);
to = to || new from.constructor();
for (var name in from) {
to[name] = typeof to[name] == "undefined" ? cloneObject(from[name], null) : to[name];
}
return to;
}
заполнение второй экземпляр с первой инстанцией информацией
console.log("original Array: " + biometricObject.evt.length + ", backup Array: " + biometricObjectBackup.evt.length);
biometricObjectBackup = cloneObject(biometricObject);
console.log("original Array: " + biometricObject.evt.length + ", backup Array: " + biometricObjectBackup.evt.length);
biometricObject.restartObject();
console.log("original Array: " + biometricObject.evt.length + ", backup Array: " + biometricObjectBackup.evt.length);
поставил три console.log следить за поведением объектов, получающих следующий вывод:
original Array: 10, backup Array: 0
original Array: 10, backup Array: 10
original Array: 0, backup Array: 0
Если я перезапущу свой оригинальный объект, второй (клонированный) очистит себя, как это сделать правильно ???
спасибо за поддержку
Я не следую с весь код и ваш пример, но ваш клон не обрабатывает массивы? Должно ли это? http://stackoverflow.com/questions/4459928/how-to-deep-clone-in-javascript – WiredPrairie
мой клон не обрабатывал копию всех его массивов, похоже, это была копия по ссылке, потому что, если бы я затронул один, затем повлиял на другой, я не знаю, почему –