获取另一个类中的类的实例

时间:2013-03-28 11:51:21

标签: javascript class instance

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

只是一个简单的问题:

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

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 
    }
} 

3 个答案:

答案 0 :(得分:1)

将其传递给函数:

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

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

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

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

答案 1 :(得分: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/

答案 2 :(得分:0)

好的,对不起 - 我发现了问题:

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

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

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