编辑:我发现我的代码存在问题 - 请参阅解决方案的答案。
只是一个简单的问题:
我想访问另一个类中的类的实例 - 我该怎么做? 以下是我的问题的一个简单示例:
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
}
}
答案 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();
}
}
答案 2 :(得分:0)
我正在使用jquery并在$(document).ready函数中创建了instanceA变量。
当我在$(document).ready函数之前创建instanceA时,它可以工作。
所以,即使我解决了我的问题,我也不理解。有人可以向我解释为什么我的第一种方法不起作用吗?