2011-12-19 13 views
7

que tienen una variable en un ámbito global que se asigna una instancia de una clase como esta:¿Se puede reemplazar una instancia de una clase en JavaScript?

window.someInstance = new MyClass(); 

En algún momento más tarde, tengo que sustituir esa variable con una nueva instancia, pero es posible/aceptables hacer eso desde dentro de un método de la clase en sí? Por ejemplo:

function MyClass() { 

    this.myClassMethod = function() { 
     window.someInstance = new MyClass(); 
    }; 

} 

window.someInstance = new MyClass(); 
window.someInstance.myClassMethod.call(); 

Un escenario raro, lo sé, pero funciona limpiamente, pero no estoy seguro si esto crea ninguna memoria o cuestiones que hacen referencia?

Gracias

+1

Sobrescribir una variable no es la misma que la sustitución de una instancia - la instancia puede ser almacenado en varios lugares a la vez, como variables o propiedades de objetos. – pimvdb

+0

¿Por qué tienes que reemplazarlo de la clase en sí? –

+0

Ahora me tienes escribiendo un código raro en mi cabeza ... 'this = eval (" nuevo "+ typeof (this) +"() ");' ... XD –

Respuesta

3

Sólo si todo el mundo siempre accessess la instancia indirectamente a través de window.somereference. Tan pronto como cualquiera lo haga var x = window.someinstance, entonces perderá la indirección y su truco dejaría de funcionar.

Es posible acheieve una implementación más robusta colocando el direccionamiento indirecto en una variable de la propia instancia en lugar de en una variable global

function Instance(){ 
    this.impl = ...; 
} 
Instance.prototype = { 
    changeImpl: function(){ this.impl = new Impl(); }, 

    //delegate all other methods 
    f1: function(){ return this.impl.f1(); } 
} 
+0

Las propiedades individuales del objeto original también se pueden referenciar externamente. – katspaugh

+0

Tengo el control del acceso, así que está bien. Gracias por la sugerencia también –

Cuestiones relacionadas