0

我有一个看起来像这样的功能

function myFunction(param)
{
    param.on('mouseover', function(){/*Do something*/});
}

var polygon = new Kinetic.Polygon({
    //My settings
});
myFunction(polygon);

这绝对没问题。但是当我在这样的数组或对象中传递多边形时,我得到了错误。

function myFunction(param)
{
    for(var elem in param)
    {
        elem.on('mouseover', function(){/*Do something*/});
    }
}

var polygon = new Kinetic.Polygon({
    //My settings
});
myFunction([polygon]);

错误是(在控制台中):

Uncaught TypeError: Object 0 has no method 'on'

我究竟做错了什么?

4

1 回答 1

1

Javascriptfor ... in循环的工作方式与您想象的略有不同。语句产生的值实际上是被迭代的对象的属性,在 Array 对象的情况下是数组索引。

以下应该工作:

function myFunction(array)
{
    for(var key in array)
    {
        elem = array[key]
        elem.on('mouseover', function(){/*Do something*/});
    }
}

有关更多示例,请参见http://javascriptweblog.wordpress.com/2011/01/04/exploring-javascript-for-in-loops/ 。

于 2013-03-23T19:26:12.060 回答