将对象传递给javascript函数

Con*_*ers 39 javascript function javascript-objects

我最近在我的网站上乱搞jQuery,而且我对Javascript的了解相当有限.我开始喜欢jQuery能够将变量传递给花括号内的jQuery函数,如下所示:

$(somediv).animate({thisisone: 1, thisistwo: 2}, thisisavar);
Run Code Online (Sandbox Code Playgroud)

我想知道的是我如何编写一个Javascript函数,我可以将项目传递到花括号内?我知道你可以编写这样的函数:

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

}
Run Code Online (Sandbox Code Playgroud)

但这不支持括号?我也知道你不能添加任何参数并执行此操作:

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");
Run Code Online (Sandbox Code Playgroud)

但是我还想传递外部变量而不仅仅是整行字符串,如果这有意义的话?

基本上,我想要一个可以传递变量的函数,如下所示:

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

myFunction (var1, {"Option 1", "Option 2", "Option 3"}, anothervar);
Run Code Online (Sandbox Code Playgroud)

Fel*_*ing 86

"大括号"正在制作一个对象文字,即它们创建一个对象.这是一个论点.

例:

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

someFunc({foo: "This", bar: "works!"});
Run Code Online (Sandbox Code Playgroud)

也可以预先创建对象:

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

someFunc(someObject);
Run Code Online (Sandbox Code Playgroud)

我建议阅读MDN JavaScript指南 - 使用对象.


Dar*_*rov 7

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

myFunction ({ var1: "Option 1", var2: "Option 2", var3: "Option 3" });
Run Code Online (Sandbox Code Playgroud)


Man*_*man 7

回答normajeans关于设置默认值的问题。创建具有相同属性的默认对象并与参数对象合并

如果使用 ES6:

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

使用 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);
    }
Run Code Online (Sandbox Code Playgroud)