Bei
http://stackoverflow.com/questions/728360/most-elegant-way-to-clone-a-javascript-object
ist beschrieben, wie man ein JS-Objekt klont:
1 | function clone(obj) {
|
2 | if (null == obj || "object" != typeof obj) return obj;
|
3 | var copy = obj.constructor();
|
4 | alert("copy here2");
|
5 | for (var attr in obj) {
|
6 | alert("copy prop "+attr);
|
7 | if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
|
8 | }
|
9 | return copy;
|
10 | }
|
11 |
|
12 | var d1 = new Date();
|
13 |
|
14 | /* Wait for 5 seconds. */
|
15 | var start = (new Date()).getTime();
|
16 | while ((new Date()).getTime() - start < 5000);
|
17 |
|
18 |
|
19 | var d2 = clone(d1);
|
20 | alert("d1 = " + d1.toString() + "\nd2 = " + d2.toString());
|
21 | //copy here2
|
22 | //d1 = Sat Apr 05 2014 23:34:09 GMT+0000 (GMT)
|
23 | //d2 = Sat Apr 05 2014 23:34:14 GMT+0000 (GMT)
|
Ich habe das ausprobiert mit Mozilla-JS und einige alerts eingefuegt,
um mehr zu sehen.
Wie vorausgesagt, unterscheiden sich die Uhrzeiten von d1 und d2 um 5
Sekunden.
Aber ich weiss nicht warum.
Das klonen von d1 wird gemacht, NACH der 5 sek - Busy-Loop.
Damit müssten doch die Uhrzeiten gleich sein?!
Leider wird das auf der Website nicht erklärt.
Die andere Frage, warum er in die "for (var attr in obj)" nicht
reinläuft.
Anscheinend wird nur der constructor kopiert.
Gruß