Object 如何在WinJS中正确克隆对象
我在WinJS中有一个创建对象的函数:Object 如何在WinJS中正确克隆对象,object,visual-studio-2013,clone,winjs,Object,Visual Studio 2013,Clone,Winjs,我在WinJS中有一个创建对象的函数: function BiometricSignatureData() { this.averageSpeed = ""; this.pressure = new Array(); this.location = new Array(); this.timestamp = new Array(); this.speed = n
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;
}
}
基本上,使用2种方法创建BiometricSignatureData类型的对象
- restartObject
- 实时打印生物特征值
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
如果我重新启动我的原始对象,第二个对象(克隆的对象)也会自行清理,如何正确操作
感谢您的支持您可以尝试以下方法:
var BiometricSignatureData = {
averageSpeed: "",
pressure: new Array(),
location: new Array(),
timestamp: new Array(),
speed: new Array(),
evt: new Array(),
spaces: 0,
attackPoints: 0,
finalPoints: 0,
signatureAddress: "",
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 = "";
},
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;
}
}
var BiometricSignatureDataBackup;
克隆功能是相同的
最后一部分:
BiometricSignatureDataBackup = cloneObject(BiometricSignatureData);
console.log("original Array: " + biometricObject.evt.length + ", backup Array: " + biometricObjectBackup.evt.length);
BiometricSignatureData.restartObject();
console.log("original Array: " + BiometricSignatureData.evt.length + ", backup Array: " + BiometricSignatureDataBackup.evt.length);
我并没有完全理解所有代码和您的示例,但您的克隆不处理阵列?应该吗?我的克隆没有处理所有阵列的副本,它似乎是一个引用副本,因为如果我影响了一个,那么影响了另一个,我不知道为什么