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

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/を参照してください。

于 2013-03-23T19:26:12.060 に答える