在javascript中创建其他对象的数组?

时间:2009-07-11 16:59:19

标签: javascript

这样的事情是可能的:

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

2 个答案:

答案 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;
}

如果您将barsArrayindex更改为属性而不是局部变量(“this.barsArray = [];”和“this.index = 0”),则可以{{1在addBar中,只有一个函数实例:

FooClass.prototype