2011-12-19 17 views
7

私はこのようなクラスのインスタンスを割り当てられているグローバルスコープ内の変数いる:いくつかの時点でクラスのインスタンスをJavaScriptで置き換えることはできますか?

window.someInstance = new MyClass(); 

後に、私は新しいインスタンスでその変数を交換する必要があるが、それは許容/可能ですそれはクラスそのものの方法の中から行うのですか?例:

function MyClass() { 

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

} 

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

奇妙なシナリオですが、正常に動作しますが、これでメモリや参照の問題が発生するかどうかはわかりません。誰もが常にwindow.somereferenceを介して間接的にインスタンスをaccessess場合のみ

おかげ

+1

に、より堅牢な実装をacheieveかもしれませんが、インスタンスを置き換えると同じではありません - インスタンスが可能オブジェクトの変数やプロパティなど、一度にいくつかの場所に格納されます。 – pimvdb

+0

なぜそれをクラス自体から置き換える必要がありますか? –

+0

あなたは今私の頭の中に奇妙なコードを書くつもりです... 'this = eval(" new "+ typeof(this)+"() ");' ... XD –

答えて

3

。すぐに誰もが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

+0

私はアクセスの制御権を持っているので、問題ありません。提案もありがとう –

関連する問題