ActionScript跟踪数组indexOf?

时间:2010-06-04 01:50:45

标签: actionscript-3 arrays

我有一个包含一个投影滤镜的滤镜数组。跟踪数组包含对象后,trace为indexOf返回-1而不是0。请解释一下。

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

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

1 个答案:

答案 0 :(得分:1)

在应用过滤器时,看起来会在后台复制过滤器。也就是说,存储在filters数组中的过滤器与您传递的对象不同。由于indexOf比较对象引用,因此得到-1,表示传递给方法的对象未包含在数组中。

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

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

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

值得注意的是,每个BitmapFilter都有一个clone()方法,我假设它是在内部调用以生成对象的新副本。