аргументы функций javascript в массиве - PullRequest
2 голосов
/ 10 июля 2011

что я пытаюсь сделать, это

    $.each($(".canvas"), function(n) {
        var canvas = $(this)[0].getContext("2d");     
        canvas.drawImage(options[n]);
    });

, где options будет массивом аргументов, но не может понять, как должен быть отформатирован массив, чтобы он работал

явно не

['img, 0,  0, 70, 17, 21, 16, 70, 17', 'img, 0,  0, 80, 12, 21, 16, 70, 17']

это ни

[''+img+', 0,  0, 70, 17, 21, 16, 70, 17', ''+img+', 0,  0, 80, 12, 21, 16, 70, 17']

, ни это

{0: [img, 0,  0, 70, 17, 21, 16, 70, 17]}

это не будет работать либо

var options = [[img, 0,  0, 70, 17, 21, 16, 70, 17],
               [img, 0, 16, 70, 17, 21, 16, 70, 17],
               [img, 0, 32, 70, 17, 21, 16, 70, 17],
               [img, 0, 48, 70, 17, 21, 16, 70, 17]];

img.onload = function() {
    $.each($(".canvas"), function(n) {
        var canvas = $(this)[0].getContext("2d");     
        canvas.drawImage(options[n].join(', '));
    });
};

ошибка всегда Uncaught TypeError: ошибка типа или Uncaught TypeError: недопустимый вызов

1 Ответ

4 голосов
/ 10 июля 2011

Использование Function.apply.

canvas.drawImage.apply(canvas, options[n]);

Где options[n] выглядит примерно так:

[img, 0, 0, 70, 17, 21, 16, 70, 17]

Полный пример:

var options = [[img, 0,  0, 70, 17, 21, 16, 70, 17],
               [img, 0, 16, 70, 17, 21, 16, 70, 17],
               [img, 0, 32, 70, 17, 21, 16, 70, 17],
               [img, 0, 48, 70, 17, 21, 16, 70, 17]];

$(img).load(function()
{
    $(".canvas").each(function(n)
    {
        var canvas = this.getContext('2d');     
        canvas.drawImage.apply(canvas, options[n]);
    });
});

Демо: http://jsfiddle.net/mattball/5EQbC/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...