1

所以这就是我试图用伪代码做的事情:

array = new Array();
thisObj = new objectTypeOne();
thisObj2 = new objectTypeTwo();
array.push(thisObj);
array.push(thisObj2);

for( i=0; i<=array.length, i++)
{ 
  if( array[i] == objectTypeOne() )
  {
    //do code
  }
 }

我知道每种对象类型可以有两个不同的数组,但这会破坏我的许多其他代码,这些代码假设它们都在同一个数组中。(它们实际上是相同的对象,但存在细微但重要的差异,我想我真的应该让 objectTypeTwo 从其他对象派生,但目前这无关紧要)。

4

2 回答 2

1

我相信您正在寻找的是:

if(array[i] is MyObjectType) {
   //I found an instance of MyObjectType
}

运算符“ isarray[i] ”进行运行时类型分析,如果您正在测试的对象(在本例中为 )直接属于您要比较的类型或子类(在本例中为),则运算符“is ”将返回 true MyObjectType。您可能还想使用typeof进行调查。但是,尽量避免有大量这样的调用或使用“typeof”的调用......在运行时查找类型信息在任何语言中都是昂贵的。

于 2012-01-17T09:21:56.710 回答
1

首先将其更正i<=array.lengthi<array.length. 这就是“术语未定义”错误的原因。

当您创建不同类的实例时,可以使用@Ascension Systems 建议的解决方案,例如

array = new Array();
thisObj = new Student();
thisObj2 = new Employee();
array.push(thisObj);
array.push(thisObj2);

然后你可以检查

for( i=0; i<array.length, i++)
{ 
  if( array[i] is Student )
  {
    //do code
  }else if(array[i] is Employee){

  }
}

如果您使用的是自定义对象,请这样做

array = new Array();
thisObj = new Object();
thisObj.type = "type1";
....
....
thisObj2 = new Object();
thisObj2.type = "type2";
...
...
array.push(thisObj);
array.push(thisObj2);

for( i=0; i<array.length, i++)
{ 
  if( array[i].type == "type1" )
  {
    //do code
  }else if( array[i].type == "type2"){

  }
}
于 2012-01-17T09:51:43.117 回答