Ich habe eine Javascript-Klasse, die ein paar Funktionen und Mitgliedsobjekte enthält:Korrekte Möglichkeit, ein Javascript-Objekt zurückzusetzen oder zu löschen?
function MyUtils()
{
// Member Variables (Constructor)
var x = getComplexData();
var y = doSomeInitialization();
// Objects
this.ParamHash = function()
{
// Member variables
this.length = 0;
this.items = new Array();
// Constructor
for (var i = 0; i < arguments.length; i += 2)
{
// Fill the items array.
this.items[arguments[i]] = arguments[i+1];
this.length++;
}
}
// Functions
this.doSomething = function()
{
// Do something.
// Uses the items in the ParamHash object.
for (var i in this.ParamHash.items)
{
// Really do something!
}
// Clear the ParamHash object -- How??
}
}
Diese auf folgende Weise aufgerufen wird:
// First call - works fine.
var utils = new MyUtils();
utils.paramHash = new utils.ParamHash("a", 1, "b", 2);
utils.doSomething();
// Don't want to re-initialize.
// utils = new MyUtils();
// Consequent call - crashes ["Object doesn't support this action."].
utils.paramHash = new utils.ParamHash("c", 3);
utils.doSomething();
Das Problem der Einschränkung ergibt sich, dass ich die wiederverwendet werden soll Gleiches utils
Objekt im gesamten Code, ohne es neu initialisieren zu müssen. Außerdem möchte ich, dass das ParamHash-Objekt jedes Mal neu erstellt wird, wenn ich es anrufe. Konsequente Aufrufe an den ParamHash-Konstruktor werfen jedoch einen Fehler "Objekt unterstützt diese Aktion nicht". In diesem Stadium kann ich sehen, dass das Objekt utils.paramHash immer noch die alten Werte ("a", "b") enthält.
Ich habe verschiedene Möglichkeiten ausprobiert, um das ParamHash-Objekt zu löschen, z. B. die Elemente und die Länge auf null zu setzen und Objekte aus dem Array zu entfernen. Nichts schien zu arbeiten, bis ich die folgende Art und Weise verwendet wird (in der doSomething()
-Funktion):
this.paramHash.items = new Array();
this.paramHash.length = 0;
Dies scheint falsch, weil was ist, wenn ich viel Membervariablen hatte ... hätte ich einzeln jeder von ihnen zurücksetzen? Also, die Frage ist: Was ist der beste Weg, um das ParamHash
Objekt in den Ausgangszustand zurückzusetzen? Ich bin sicher, ich hoffe, dass es einen saubereren/direkteren Weg gibt. Etwas wie:
// Doesn't work! :-(
this.paramHash = new function() {};
EDIT: Ich bin für eine Cross-Browser-Lösung - eine, die atleast in IE6 + und FF 2+ arbeitet.
Lösung: Dank Cristoph, ich war in der Lage, es zu tun, indem eine separate Variable/Eigenschaft innerhalb MyUtils
zu schaffen, die nur die Instanz der ParamHash
Funktion hält.
function MyUtils()
{
// Same ol' stuff.
var myParamHash;
}
// First call - works fine.
var utils = new MyUtils();
utils.myParamHash = new utils.ParamHash("a", 1, "b", 2);
utils.doSomething();
// Consequent call - works fine now.
utils.myParamHash = new utils.ParamHash("c", 3);
utils.doSomething();
ich eine einfachere Lösung zu meiner Antwort hinzugefügt; Ich weiß nicht, welches Problem du lösen willst, also könnte dein Code besser geeignet sein ... – Christoph