Actionscript 3 ActionScript跟踪数组indexOf?

Actionscript 3 ActionScript跟踪数组indexOf?,actionscript-3,arrays,Actionscript 3,Arrays,我有一个过滤器阵列,其中包含一个阴影过滤器。在跟踪数组包含对象之后,跟踪将返回-1,而不是indexOf的0。请解释一下 trace(filterObject); trace(displayObject.filters); trace(displayObject.filters.indexOf(filterObject)); //outputs: // // [object DropShadowFilter] // [object DropShadowFilter] // -1 应用过滤器时

我有一个过滤器阵列,其中包含一个阴影过滤器。在跟踪数组包含对象之后,跟踪将返回-1,而不是indexOf的0。请解释一下

trace(filterObject);
trace(displayObject.filters);
trace(displayObject.filters.indexOf(filterObject));

//outputs:
//
// [object DropShadowFilter]
// [object DropShadowFilter]
// -1

应用过滤器时,过滤器似乎是在幕后复制的。也就是说,存储在过滤器数组中的过滤器与传递的对象不同。因为indexOf比较对象引用,所以得到-1,表示传递给方法的对象不包含在数组中

这个小片段更清楚地说明了这一点:

var filter:DropShadowFilter = new DropShadowFilter();
var sprite:Sprite = new Sprite();
sprite.filters = [filter];

trace(sprite.filters[0] == filter); // false!

值得注意的是,每个BitmapFilter都有一个clone()方法,我假设在内部调用该方法来创建对象的新副本

哼。。。那么,是否没有办法可靠地跟踪过滤器数组中过滤器的索引?除了使用循环并检查过滤器的类型之外,我不这么认为。如何检查过滤器的类型?是否使用toString()?还是有更合适的方法?我认为使用
is
操作符是更好的方法<代码>如果(过滤器是DropShadowFilter){//code here}。