хэш против определенных параметров - PullRequest
1 голос
/ 13 июля 2009

Я пишу небольшую библиотеку javascript, чтобы упростить создание / проверку форм. Это в основном повод, чтобы поправиться с помощью JavaScript. Я спорю о том, как принять пользовательский ввод для создания элемента формы.

Я смотрю на два подхода. Одним из них является использование нескольких предварительно определенных параметров, таких как идентификатор, метка, значение

Другой способ состоит в том, чтобы взять один объект, который будет использоваться для записи свойств прямо в элемент формы. Так, например, если бы я хотел передать идентификатор метки и значение, я бы просто передал {id: 'my_id', метку: 'my_label', значение: 'my_value}

Третий вариант - взять id, label, options, где options - это объект, который делает то, что я описал выше.

Сейчас передача объекта внутрь кажется наиболее гибкой, но мне интересно, есть ли в этом какие-либо серьезные недостатки? Я хотел бы, чтобы это было легко использовать для большинства пользователей JavaScript. Есть какие-нибудь мысли о том, как лучше всего это сделать?

Ответы [ 3 ]

1 голос
/ 13 июля 2009

Использование объектов представляется «стандартным» способом сделать это в коде JS, который я изучал.

Использование списка определенных параметров, который добавляет требование к упорядочению, быстро выходит из-под контроля, когда у вас есть несколько параметров.

Если у вас есть «зависимые» параметры, например те, которые появляются только для определенных значений другого параметра, то это особенно уродливо при использовании простого списка параметров.

Однако будьте осторожны при переборе свойств объекта. Легко получить унаследованные элементы, которые не предназначены. Дуглас Крокфорд рекомендует , используя hasOwnProperty () для проверки этого случая.

1 голос
/ 13 июля 2009

Обычный способ справиться с этим - использовать объект параметров, как при вашем втором выборе.Большинство плагинов (и методов jQuery), которые требуют опций, используют этот шаблон.Насколько я знаю, в этом нет недостатков, и, поскольку это очень распространенный способ обработки опций, я не вижу, что его трудно использовать для других.есть что-то, что обязательно должно быть передано, например.Я бы.Именно в этом случае объект параметров чаще всего используется в качестве конечного параметра функции.

Надеюсь, это поможет

0 голосов
/ 13 июля 2009

Вы можете поддерживать оба, с небольшим количеством взлома. Вы можете проверить все аргументы, переданные функции :

Затем вы можете использовать условие как:

var func = function(){
    if(arguments[0].id) {
        id = arguments[0].id;
    } else {
        id = arguments[0];
    }

    // .. and so on ...
}

Это в основном говорит о том, что если первый аргумент является объектом, извлеките идентификатор, иначе используйте аргумент напрямую.

Я предпочитаю объектный способ, он пригоден для использования внешними источниками данных JSON.

...