2011-12-19 71 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

相关问题