передача неизвестного количества параметров в функцию конструктора js - PullRequest
1 голос
/ 05 декабря 2011

Я использую некоторые библиотеки JavaScript для рисования диаграмм. В инициализатор диаграммы необходимо передать массивы с координатами. Но функция инициализатора диаграммы имеет сигнатуру, похожую на новую функцию ([arr1], [arr2], [arr3]) , но я не знаю, сколько массивов я в нее передам, но это невозможно инициализируйте это другим способом. Как это можно решить? Спасибо.

UPD: вызвана функция конструктор , поэтому она не работает корректно с apply . Проблема в том, как передать данные, а не в том, как получить счетчик пропущенных данных

Ответы [ 4 ]

5 голосов
/ 13 января 2012

РЕШЕНИЕ : Можно использовать apply в конструкторе, но для этого требуется следующий обходной путь:

function construct(constructor, args) {
    function F() {
        return constructor.apply(this, args);
    }
    F.prototype = constructor.prototype;
    return new F();
}
3 голосов
/ 05 декабря 2011

Вы можете использовать встроенную переменную с именем arguments, которая является массивоподобным объектом аргументов, переданных функции, и arguments.length, чтобы определить, сколько аргументов было передано. См. MDN ссылка для получения дополнительной информации.

function myFunc() {
    for (var i = 0; i < arguments.length; i++) {
        // you can process arguments[i] here
    }
}

Если вы пытаетесь передать переменное количество аргументов, вы можете использовать .apply(). Вы создаете массив аргументов и передаете его в качестве второго аргумента для применения. Первый аргумент - это то, что вы хотите, чтобы указатель this был установлен в. Вот ссылка MDN для .apply().

var myArgs = [arr1, arr2, arr3];
myFunc.apply(window, myArgs);
0 голосов
/ 05 декабря 2011

Функции, которые принимают переменное число аргументов, называются переменными функциями . В JavaScript вы можете использовать объект arguments для доступа к аргументам. Для вызова функции вы также можете использовать .call или .apply

0 голосов
/ 05 декабря 2011

Вы хотите использовать объект arguments.Это в основном массивоподобный объект со всеми вашими аргументами.Вы можете использовать его так:

function yourFunction() {
    for (var i = 0, len = arguments.length; i < len; i++) {
        console.log(arguments[i]); //That's the argument you passed in.
    }
}

Демо

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