传递param直接工作,在对象或数组中传递它是行不通的

时间:2013-03-23 19:15:24

标签: javascript kineticjs

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

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'

我做错了什么?

1 个答案:

答案 0 :(得分:1)

Javascript' for ... 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/