0

编辑:我发现我的代码有问题 - 请参阅我的解决方案答案。

只是一个简单的问题:

我想访问另一个类中的一个类的实例 - 我该怎么做?这是我的问题的一个简单示例:

var instanceA = new ClassA();

function ClassA(){
    var instanceB = null;

    this.start = function(){
        instanceB = new ClassB();
        instanceB.start();
    }

    this.action = function(){
        console.log('works not');
    }
} 

function ClassB(){
    this.start = function(){
        instanceA.action(); // this throws: Uncaught ReferenceError: instacneA is not defined 
    }
} 
4

3 回答 3

1

将其传递给函数:

this.start = function(instA) { ... }
instanceB.start(instanceA);

或者,如果要在多个方法中重用此实例,请将其传递给构造函数

function ClassB(instA) {
    this.instanceA = instA;
    this.start = function() { this.instanceA.action(); }
}

PS 全局变量是邪恶的(大多数时候)。var instanceA = ...创建一个。所以,如果它只是一个快速原型 - 没关系。如果不是 - 尽量避免这种情况

于 2013-03-28T11:54:06.823 回答
0

虽然当您调用 instanceA.start() - http://jsfiddle.net/infernalbadger/U5aUd/时,您的示例似乎工作正常

将 ClassA ( this) 的实例传递给 ClassB 可能会更好,而不是依赖于全局:

function ClassA(){
    var instanceB = null;
    var self = this;             // Save instance of ClassA
    this.start = function(){
        instanceB = new ClassB();
        instanceB.start(self);   // Pass to ClassB
    }

    this.action = function(){
        console.log('works not');
    }
} 

function ClassB(){
    this.start = function(a){       // Use passed in instance of ClassA
        a.action(); 
    }
} 

http://jsfiddle.net/infernalbadger/U5aUd/1/

于 2013-03-28T11:57:43.000 回答
0

好的,我很抱歉 - 我发现了问题:

我正在使用 jquery 并在 $(document).ready 函数中创建了 instanceA 变量。

当我在 $(document).ready 函数之前创建 instanceA 时,它可以工作。

所以,即使我解决了我的问题,我也不明白。有人可以向我解释为什么我的第一种方法不起作用吗?

于 2013-03-28T12:00:59.670 回答