2011-12-19 69 views
7

我有是這樣分配的類的實例在全球範圍內的變量:一個類的實例可以用JavaScript代替它自己嗎?

window.someInstance = new MyClass(); 

在某一點後,我需要更換一個新的實例變量,但有可能/接受從類本身的方法中做到這一點?例如:

function MyClass() { 

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

} 

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

我知道一個奇怪的場景,但它乾淨地工作,我不知道這是否會產生任何內存或引用問題?

感謝

+1

覆蓋一個變量acheieve更健壯的實現是不一樣的替換實例 - 實例可一次存儲在多個位置,例如對象的變量或屬性。 – pimvdb 2011-12-19 12:06:24

+0

爲什麼你必須從課堂本身中取代它? – 2011-12-19 12:14:37

+0

你讓我在頭腦中寫下奇怪的代碼......'this = eval(「new」+ typeof(this)+「()」);'... XD – 2011-12-19 12:16:10

回答

3

只有大家總是通過window.somereference間接accessess實例。只要有人做了var x = window.someinstance那麼你就失去了間接性,你的詭計就會停止。

你可能會通過將間接在實例本身的一個變量,而不是在一個全局變量

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

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

原始對象的各個屬性也可以從外部引用。 – katspaugh 2011-12-19 13:05:01

+0

我對訪問進行了控制,因此沒問題。謝謝你的建議 – 2011-12-19 13:18:26

相關問題