2011-12-19 11 views
7

Mam zmienną w zakresie globalnym, który jest przypisany instancję klasy tak:Czy instancja klasy może się sama zastąpić w JavaScript?

window.someInstance = new MyClass(); 

w pewnym momencie później, muszę wymienić tę zmienną z nowym przykład, ale jest to możliwe/akceptowalne zrobić to z poziomu metody samej klasy? Na przykład:

function MyClass() { 

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

} 

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

Dziwny scenariusz, który znam, ale działa to czysto, po prostu nie jestem pewien, czy to tworzy jakąkolwiek pamięć lub odniesienia problemów?

Dzięki

+1

nadpisywania zmiennej nie jest taka sama jak zastąpienie instancji - instancja może być przechowywane w kilku miejscach jednocześnie, takich jak zmienne lub właściwości obiektów. – pimvdb

+0

Dlaczego musisz go zastąpić z samej klasy? –

+0

Mam teraz pisanie dziwacznego kodu w mojej głowie ... 'this = eval (" nowy "+ typeof (this) +"() ");' ... XD –

Odpowiedz

3

Tylko jeśli wszyscy zawsze accessess instancji pośrednio poprzez window.somereference. Jak tylko ktoś zrobi var x = window.someinstance, stracisz obojętność, a twoja sztuczka przestanie działać.

Możecie acheieve bardziej zdecydowane wdrażanie poprzez umieszczenie zadnie w zmiennej samej instancji zamiast w zmiennej globalnej

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

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

Poszczególne właściwości oryginalnego obiektu można odnosić również zewnętrznie. – katspaugh

+0

Mam kontrolę nad dostępem, więc wszystko w porządku. Dzięki za sugestię –

Powiązane problemy