尝试将原始对象推送到数组,稍后查找其索引

时间:2015-11-14 17:59:30

标签: javascript object canvas

我创建了自己的addEventListener来处理画布上的对象,但是我在创建自己的removeEventListener函数时遇到了麻烦。

在我的形状构造函数中,我有这段代码:

this.addEventListener = function(method, func)
{
    if (method == "mouseDown")
    {
        scene.mouseDownShapes.push({shape:this, func:func})
    }
}
this.removeEventListener = function(method, func)
{
    if (method == "mouseDown")
    {
        scene.mouseDownShapes.splice(scene.mouseDownShapes.indexOf({shape:this, func:func}), 1);
    }
}

在我的鼠标按下处理程序中,我运行了scene.mouseDownShapes并检查它们是否与鼠标发生碰撞。如果他们这样做,那么我打电话给func。这里的问题是," scene.mouseDownShapes.indexOf(...)"返回-1,所以它不起作用。如何在数组中找到原始对象的索引?

1 个答案:

答案 0 :(得分:1)

.indexOf()的对象相等仅适用于同一物理对象(它不适用于具有相同属性的其他对象)。

由于您没有引用放入数组中的同一物理对象,因此您可以在数组中搜索具有属性shape: this的对象。这涉及遍历数组以找到它。

this.removeEventListener = function(method, func) {
    if (method == "mouseDown"){
        for (var i = 0; i < scene.mouseDownShapes.length) {
            if (scene.mouseDownShapes[i].shape === this) {
                scene.mouseDownShapes.splice(i, 1);
                break;
            }
        }
    }
}