这样的事情是可能的:
function FooClass()
{
var barsArray=new Array();
var index=0;
function addBar()
{
barsArray[index]=new BarClass(index);
}
}
function BarClass()
{
var myIndex;
function BarClass(index)
{
myIndex=index;
}
}
答案 0 :(得分:2)
我推断你想拥有一个Foo对象,而且Foo对象应该包含一个Bar对象数组。每个Bar对象都应该在其父Foo对象中知道它的数组索引。
如果这是准确的描述,那么试试这个:
function BarClass(idx) {
this.myIndex = idx;
}
function FooClass(howMany) {
this.barsArray = [];
for (var x = 0; x < howMany; x++) {
this.barsArray[x] = new BarClass(x);
}
}
var foo = new FooClass(5);
// foo.barsArray[0].myIndex === 0
// foo.barsArray[1].myIndex === 1
// foo.barsArray[2].myIndex === 2
// foo.barsArray[3].myIndex === 3
// foo.barsArray[4].myIndex === 4
// foo.constructor === 'FooClass'
// foo.barsArray[0].constructor === 'BarClass'
祝你好运!
答案 1 :(得分:1)
不完全(实际上是编译,但可能不符合您的意图)。
我假设您要使用FooClass
方法创建addBar
课程,该方法会将BarClass
个对象附加到其barsArray
成员。
addBar
函数只是FooClass
函数/构造函数中的局部变量。要使其可以从构造函数外部访问,您需要将其分配给this.addBar
。除了记住增加index
之外,您需要在FooClass
中进行更改。
对于BarClass
类,请记住“类”实际上只是一个构造函数。您不需要(也不能)单独的构造函数。 BarClass
只是一个单独的函数,它接受一个索引并将其分配给this.myIndex
。
function FooClass()
{
// use this.barsArray = [], etc if you want them to be publically available
var barsArray=[]; // It's usually better to use "[]" instead of "new Array()"
var index=0;
this.addBar = function() {
barsArray[index]=new BarClass(index);
index++;
}
}
function BarClass(index)
{
this.myIndex=index;
}
如果您将barsArray
和index
更改为属性而不是局部变量(“this.barsArray = [];”和“this.index = 0”),则可以{{1在addBar
中,只有一个函数实例:
FooClass.prototype