Si tengo una función de constructor de JavaScript, y configuro un método de destrucción en su prototipo. ¿Es posible eliminar (o al menos desarmar) la instancia del método de destrucción? Aquí hay un ejemplo de lo que intento hacer.Cómo hacer que una instancia se elimine dentro de una función de prototipo es 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
entiendo que no puedo simplemente hacer this = undefined
de con el método de destruir, pero pensé que podría obtener en torno a que mediante el uso de un tiempo de espera de este modo:
destroy: function() {
var self = this;
setTimeout(function() {
self = undefined
}, 0)
}
pensé que la función de tiempo de espera Tendría acceso a la instancia a través del self
desde el cierre (y lo hace), pero eso no parece funcionar. Si yo console.log(self)
desde el interior de esa función aparece como undefined
, pero k
en el alcance global sigue siendo una instancia de Klass
.
¿Alguien sabe cómo hacer esto?
¿Puedo preguntarle por qué necesita 'destruir' una instancia como esta? responder a la pregunta que hizo es una cosa pero puede que no le ayude a hacer lo que está tratando de hacer, por lo tanto, mi pregunta –
JavaScript es basura recolectada y no tiene una forma explícita de destruir un objeto, por lo que no hay un lenguaje integrado para hacer lo que están preguntando. Al igual que con Pavel, tengo mucha curiosidad por saber por qué necesitas tal cosa, probablemente haya una mejor manera de lograr lo que quieres hacer. – chuckj
Es para un plugin jQuery. Tener un método de destrucción parece más intuitivo que esperar que los desarrolladores eliminen o desactiven sus propias instancias, pero tal vez no sea así. –