Предавайте обект към функцията на 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
Wraith, бих искал само да отбележа, че ако предавате предварително декларирани променливи, вашата функция вече ще има достъп до тях без специален синтаксис (стига да не са вложени в друга функция).   -  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 Guide: 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