Javascript объектная функция с опциями - PullRequest
4 голосов
/ 04 ноября 2011

Я пытаюсь создать функцию с опциями. Я верю, что должен использовать объекты, но пока что терпит неудачу. Под опциями я имею в виду нечто подобное:

insertButton({
    settings:{
        value1:'Some text'      
    }
});

function insertButton(settings){
    settings = new Object();    
    document.write(settings.value1);
}

Очевидно, что это не сработает, но я пытаюсь показать, что я имею в виду. Может быть, кто-то может помочь.

Я спрашиваю, потому что сейчас у меня есть простая функция, где я могу передавать значения в строгом порядке. С опциями я хочу быть независимым от порядка переменных в функции. Например:

function insertButton2(value1,value2,value3){
    document.write(value1);
    document.write(value2);
    document.write(value3);   
}

insertButton2('a','','c');  //empty commas to skip value2 

Оставлять пустые запятые, чтобы убедиться, что 'c' равно значению3, мне не удобно. Вот почему я хотел бы попробовать объекты, варианты.

Thx.

Ответы [ 3 ]

8 голосов
/ 04 ноября 2011

Вы просто передаете в функцию объект с необходимыми ключами / значениями:

function parameterify(params) {
    console.log(params.isAwesome);
}

parameterify({
    isAwesome : true
});
//logs true

Вы допустили две ошибки:

  1. В именах нет параметровjs, так что {settings:{}} передаст объект с ключом настроек (так что внутри функций вам нужно будет сделать settings.settings)

  2. Вы повторно объявили settingsв верхней части функции (settings = new Object();), которая независимо от того, что вы передаете, всегда перезаписывает ее.Как примечание стороны, new Object ненадежно - литерал объекта {} намного круче

2 голосов
/ 04 ноября 2011

Попробуйте это

function insertButton(settings){
    document.write(settings.value1);
}

insertButton({
    value1:'Some text'      
});
2 голосов
/ 04 ноября 2011

Хорошо, вы перезаписываете settings в пустой объект в первой строке вашей функции, уберите его, и он будет работать ...

Редактировать: Извините, рано удалите объект настроек из аргументовдолжно быть просто

insertButton({
       value1:'Some text'      
});
...