我最近在我的网站上乱搞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);
答案 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);
}