Jeśli mam funkcję konstruktora JavaScript i ustawiłem metodę destroy na jej prototypie. Czy można usunąć (lub przynajmniej usunąć) instancję z metody destroy? Oto przykład tego, co próbuję zrobić.Jak usunąć instancję z funkcji prototypowej to JavaScript
Klass.prototype = {
init: function() {
// do stuff
},
destroy: function() {
// delete the instance
}
};
k = new Klass
k.destroy()
console.log(k) // I want this to be undefined
Rozumiem, że nie mogę po prostu zrobić this = undefined
z metodą zniszczenia, ale myślałem, że mogę poruszać się, że używając timeout tak:
destroy: function() {
var self = this;
setTimeout(function() {
self = undefined
}, 0)
}
Myślałem funkcję limitu czasu miałby dostęp do instancji przez self
z zamknięcia (i robi to), ale to nie działa. Jeśli I console.log(self)
od wewnątrz tej funkcji pojawia się jako undefined
, ale k
w zasięgu globalnym jest nadal instancją Klass
.
Czy ktoś wie, jak to zrobić?
czy mogę zapytać, dlaczego musisz "zniszczyć" taką instancję? odpowiedź na pytanie, które sobie zadałeś, jest jedną rzeczą, ale może nie pomoże ci zrobić tego, co próbujesz zrobić, stąd moje pytanie: –
JavaScript jest zbiorem śmieci i nie ma explicjonalnego sposobu na zniszczenie obiektu, więc nie ma wbudowanego w język sposobu na zrobienie tego, co Ty pytają. Podobnie jak w przypadku Pavela, jestem bardzo ciekawy, dlaczego potrzebujesz czegoś takiego, prawdopodobnie istnieje lepszy sposób na osiągnięcie tego, co chcesz robić. – chuckj
To jest dla wtyczki jQuery. Posiadanie metody niszczenia wydaje się bardziej intuicyjne, niż oczekiwanie od deweloperów usunięcia lub usunięcia własnych instancji, ale być może nie. –