类的实例可以在JavaScript中替换自身吗?

类的实例可以在JavaScript中替换自身吗?,javascript,Javascript,我在全局范围内有一个变量,它被分配了一个类的实例,如下所示: window.someInstance = new MyClass(); 在稍后的某个时候,我需要用一个新实例替换该变量,但是从类本身的方法中这样做是否可能/可以接受?例如: function MyClass () { this.myClassMethod = function () { window.someInstance = new MyClass(); }; } window.someI

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

window.someInstance = new MyClass();
在稍后的某个时候,我需要用一个新实例替换该变量,但是从类本身的方法中这样做是否可能/可以接受?例如:

function MyClass () {

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

}

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

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

只有在每个人都总是通过
窗口间接访问实例的情况下。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(); }
}

覆盖变量与替换实例不同-实例可以同时存储在多个位置,例如变量或对象的属性。为什么必须从类本身替换它?你让我现在在脑海中编写奇怪的代码<代码>此=评估(“新”+类型(此)+“()”。。。XD从类代码内部更新特定变量不是我“干净”工作的想法。这也意味着您不能创建分配给不同变量的类的多个实例,因为它们都要替换相同的
窗口。someInstance
,那么为什么要麻烦使用“类”构造函数而不是使用对象文本呢?顺便问一下,你为什么在最后一行中使用
.call()
?.call()是习惯的力量。jQuery在实际代码中使用,因此我使用.call()将其作用域限定在类而不是jQuery对象上。原始对象的个别属性也可以在外部引用。我可以控制访问权限,这样就可以了。也谢谢你的建议