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

#function #javascript-objects #javascript

#функция #javascript-объекты #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);
  

Комментарии:

1. FWIW {"Option 1", "Option 2", "Option 3"} и var 1 недопустимый JavaScript.

2. Призрак, я просто хотел бы отметить, что если вы передаете предварительно объявленные переменные, ваша функция уже сможет получить к ним доступ без какого-либо специального синтаксиса (если они не вложены в какую-либо другую функцию).

3. Эй, Марлин, они не будут предварительно объявлены, я написал это неправильно, это будет выглядеть примерно так myFunction("Title", {"Option 1" : "option1name", "Option 2" : "option2name"}, true)

Ответ №1:

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

Пример:

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

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

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

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

someFunc(someObject);
  

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

Комментарии:

1. Знаете ли вы, как установить значение по умолчанию, если, скажем, значение foo не было передано? Такой, который someFunc({bar: "works!"}); по-прежнему генерирует предупреждения с надписью «Это» и «работает!»

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

3. Вот обновленный URL-адрес руководства MDN JS: developer.mozilla.org/en-US/docs/Web/JavaScript/Guide

4. Привет @Felix. что, если у этого объекта есть функция? он вызывается немедленно. как я могу это предотвратить?

5. @Arash: Вы должны опубликовать актуальный вопрос. Здесь мне не хватает большого контекста, но создание объекта, который содержит функцию в качестве свойства, не вызывает указанную функцию автоматически. Если это происходит в вашем случае, то ваш код (намеренно или непреднамеренно) настроен для этого.

Ответ №2:

 function myFunction(arg) {
    alert(arg.var1   ' '   arg.var2   ' '   arg.var3);
}

myFunction ({ var1: "Option 1", var2: "Option 2", var3: "Option 3" });
  

Комментарии:

1. Правильно. … Я использовал JSON.parse() для моего объектного литерала. … он уже был проанализирован! …дох!

Ответ №3:

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

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

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

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

     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);
    }
  

Ответ №4:

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

Ответ №5:

Мои центы.

 function readable(args) {
    const {opt1, opt2, opt3} = args

 
    console.log(opt1   opt2   opt3)
    // => "My favorite things"
}


readable({
      opt1: "My f"
    , opt2: "avori"
    , opt3: "te things"
})