一个类的实例可以在JavaScript中替换自己吗?

Rus*_*ack 7 javascript

我在全局范围内有一个变量,它被分配了一个类的实例,如下所示:

window.someInstance = new MyClass();
Run Code Online (Sandbox Code Playgroud)

稍后,我需要用新实例替换该变量,但是在类本身的方法中这样做是否可行/可接受?例如:

function MyClass () {

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

}

window.someInstance = new MyClass();
window.someInstance.myClassMethod.call();
Run Code Online (Sandbox Code Playgroud)

我知道一个奇怪的场景,但它干净利落,我只是不确定这是否会产生任何内存或引用问题?

谢谢

hug*_*omg 3

仅当每个人始终通过 间接访问实例时window.somereference。一旦有人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(); }
}
Run Code Online (Sandbox Code Playgroud)