2017-02-02 2 views
0

Gibt es eine Möglichkeit, ein Objekt aus seiner Methode zu löschen.Gibt es eine Möglichkeit, ein JavaScript-Objekt aus der Objektmethode zu löschen oder zu annullieren?

Lassen Sie mich ein wenig ausführlich erklären. Ich habe eine JS-Klasse namens "Test" und ich erstelle eine neue Instanz dieser Klasse und weise sie einer Variablen wie unten zu.

var Test = function() 
{ 

} 

Test.prototype = 
{ 
    printLog: function() 
    { 
     // Print some values 
    }, 

    destroy: function() 
    { 
     //Here I want to delete **this** Test object. 
    } 
} 

var a = new Test(); 

Jetzt möchte ich die neu erstellte Test-Klasse-Objekt löschen, die in variable ein durch den Aufruf a.destroy wie unten zugeordnet ist.

a.destroy(); 
console.log(a); //It should print null instead on object code. 

nach Aufruf der Methode destroy(), variable a Wert als null in Konsolenprotokoll ausgedruckt.

+0

haben Sie versucht, dem Element den Wert 'null' zuzuweisen ('this = null;')? Vielleicht ist das, was ich sage, dumm, aber ich frage mich, ob es funktioniert oder nicht. – AymDev

+1

Es gibt keine ungültige linke Zuweisung. Es funktioniert nur, wenn Sie es benennen. – Shilly

+1

EcmaScript 6 spezifiziert überhaupt keine Garbage Collection Semantik, also gibt es auch keine "Zerstörung". Quelle: http://StackOverflow.com/Questions/29333017/ecmascript6-Class-Destructor – Robert

Antwort

0

Warum schreiben Sie nicht einfach a = null; statt a.destroy();?

Innerhalb Ihrer Destroy-Methode können Sie delete this nicht verwenden, da this keine Eigenschaft, sondern ein Objekt ist. Und es sieht so aus, als ob Sie weder this = null; noch schreiben können. Aber wie gesagt, ich glaube nicht, dass Sie eine Methode brauchen, um Ihr Objekt auf Null zu setzen.

+0

Vielen Dank für Ihre Antwort. Eigentlich erstelle ich eine Komponente (Beispiel Java Script-Fenster). Wenn der Benutzer ein Fenster schließt, wird die close() -Methode aufgerufen, von wo aus ich das Objekt aufheben muss. – Kather

0

Eine Möglichkeit, die Methode destroy zu verwenden, besteht darin, einen Namensraum AND zu verwenden, indem Sie den Variablennamen fest codieren und beides als Parameter senden zerstören. Aber imho, das macht die Dinge nur noch komplizierter. Also var a = null; ist meine bevorzugte Lösung;

Aber wenn Sie sich für die Methode destroy() entscheiden, ist es wahrscheinlich besser, die Destroy-Methode im Namespace als im Prototyp der Klasse zu verwenden.

var Test = function() { 

}; 
Test.prototype = { 
    printLog: function() { 
     // Print some values 
    }, 

    destroy: function(namespace, instanceName) { 
     namespace[instanceName] = null; 
    } 
}; 
var instances = { 
    'a' : new Test() 
}; 
console.log(instances); 
instances.a.destroy(instances, 'a'); 
console.log(instances); 

/////////////////////////// 

var Test = function() {}; 
Test.prototype = { 
    printLog: function() { 
     // Print some values 
    } 
}; 
var Namespace = function() {}; 
Namespace.prototype = { 
    'add' : function(name, obj) { 
     this[name] = obj; 
    }, 
    'destroy' : function(name) { 
     delete this[name]; 
    } 
}; 
var ns = new Namespace(); 
ns.add('a', new Test()); 
console.log(ns); 
ns.destroy('a'); 
console.log(ns); 
Verwandte Themen