将对象传递给javascript函数

时间:2011-10-14 07:42:35

标签: function javascript-objects 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);

4 个答案:

答案 0 :(得分:80)

“大括号”正在制作对象文字,即它们会创建一个对象。这是一个论点。

示例:

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

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

也可以预先创建对象:

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

someFunc(someObject);

我建议您阅读MDN JavaScript Guide - Working with Objects

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

当您将大括号内的对象作为带有一个参数的函数的参数传递时,您正在将该对象分配给变量(在这种情况下为参数)

答案 3 :(得分:0)

回答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(目标,源)的旧版浏览器:

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