Передать объект в функцию javascript

Недавно я возился с jQuery на своем веб-сайте, и у меня довольно ограниченное знание Javascript. Мне начинает нравиться способность jQuery передавать переменные в функцию jQuery внутри фигурных скобок, например:

$(somediv).animate({thisisone: 1, thisistwo: 2}, thisisavar);

Мне было интересно, как я могу написать функцию Javascript, в которую я могу передавать элементы внутри фигурных скобок? Я знаю, что вы можете написать такие функции:

function someName(var1, var2, var3...) {

}

но это не поддерживает фигурные скобки? Я также знаю, что вы можете не добавлять аргументы и сделать это:

function accident() {
    for( var i = 0; i < arguments.length; i++ ) {
        alert("This accident was caused by " + arguments[i]);
    }
}
accident("me","a car","alcohol","a tree that had no right to be in the path of my driving");

но я также хочу передавать внешние переменные, а не целую строку строк, если это имеет смысл?

По сути, мне нужна функция, которой я могу передавать переменные, например:

function myFunction(neededcodehere){
    //Some code here...
}

myFunction (var1, {"Option 1", "Option 2", "Option 3"}, anothervar);

person Connor Deckers    schedule 14.10.2011    source источник
comment
FWIW, {"Option 1", "Option 2", "Option 3"} и var 1 не являются допустимыми JavaScript.   -  person Felix Kling    schedule 14.10.2011
comment
Призрак, я просто хотел бы отметить, что если вы передаете предварительно объявленные переменные, ваша функция уже сможет получить к ним доступ без какого-либо специального синтаксиса (если они не вложены в какую-либо другую функцию).   -  person Marlin    schedule 14.10.2011
comment
Эй, Марлин, они не будут объявлены заранее, я неправильно написал, это будет выглядеть примерно так myFunction("Title", {"Option 1" : "option1name", "Option 2" : "option2name"}, true)   -  person Connor Deckers    schedule 14.10.2011


Ответы (4)


Фигурные скобки делают литерал объекта, т. е. создают объект. Это один аргумент.

Пример:

function someFunc(arg) {
    alert(arg.foo);
    alert(arg.bar);
}

someFunc({foo: "This", bar: "works!"});

объект также может быть создан заранее:

var someObject = {
    foo: "This", 
    bar: "works!"
};

someFunc(someObject);

Я рекомендую прочитать Руководство по MDN JavaScript - Работа с объектами.

person Felix Kling    schedule 14.10.2011
comment
Знаете ли вы, как установить значение по умолчанию, если, скажем, значение foo не было передано? Так что someFunc({bar: "works!"}); по-прежнему генерирует оповещения с надписью «Это» и работает! - person Normajean; 03.08.2020
comment
@Normajean Вы создаете объект по умолчанию с теми же свойствами и объединяете его с объектом аргументов. Смотрите мой ответ ниже, так как форматирование в комментариях плохое - person Manuel Guzman; 25.09.2020
comment
Вот обновленный URL руководства MDN JS: developer.mozilla.org/en -US/docs/Web/JavaScript/Руководство - person w3Develops; 15.01.2021

когда вы передаете объект в фигурных скобках в качестве аргумента функции с одним параметром, вы назначаете этот объект переменной, которая в данном случае является параметром

person polendina    schedule 16.09.2020

Отвечая на вопрос normajeans об установке значения по умолчанию. Создайте объект по умолчанию с теми же свойствами и объедините его с объектом аргументов.

При использовании ES6:

    function yourFunction(args){
        let defaults = {opt1: true, opt2: 'something'};
        let params = {...defaults, ...args}; // right-most object overwrites 
        console.log(params.opt1);
    }

Старые браузеры, использующие Object.assign(target, source):

    function yourFunction(args){
        var defaults = {opt1: true, opt2: 'something'};
        var params = Object.assign(defaults, args) // args overwrites as it is source
        console.log(params.opt1);
    }
person Manuel Guzman    schedule 24.09.2020

person    schedule
comment
Верно. ... Я стремился к JSON.parse() моего объектного литерала. ...это уже было проанализировано! ...дох! - person Ronnie Royston; 05.01.2017