将对象传递给 javascript 函数

Posted

技术标签:

【中文标题】将对象传递给 javascript 函数【英文标题】:Pass object to javascript function 【发布时间】:2011-12-07 13:12:21 【问题描述】:

我最近在我的网站上玩弄 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);

【问题讨论】:

FWIW、"Option 1", "Option 2", "Option 3"var 1 不是有效的 JavaScript。 Wraith,我想指出的是,如果您传递预先声明的变量,您的函数将已经能够在没有任何特殊语法的情况下访问它们(只要它们没有嵌套在一些其他功能)。 嘿 Marlin,它们不会被预先声明,我写错了,它看起来像 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 Guide - Working with Objects。

【讨论】:

如果没有传递 foo 值,您知道如何设置默认值吗?这样someFunc(bar: "works!"); 仍然会生成“This”和“works!”的警报 @Normajean 您创建一个具有相同属性的默认对象并与参数对象合并。请参阅下面的答案,因为 cmets 中的格式很差 这里是 MDN JS 指南的更新网址:developer.mozilla.org/en-US/docs/Web/JavaScript/Guide【参考方案2】:

回答 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);
    

【讨论】:

【参考方案3】:

当您将花括号内的对象作为参数传递给具有一个参数的函数时,您将此对象分配给一个变量,在这种情况下该变量是参数

【讨论】:

【参考方案4】:
function myFunction(arg) 
    alert(arg.var1 + ' ' + arg.var2 + ' ' + arg.var3);


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

【讨论】:

对。 ...我厌倦了 JSON.parse() 我的对象文字。 ...它已经被解析了! ...哦!

以上是关于将对象传递给 javascript 函数的主要内容,如果未能解决你的问题,请参考以下文章

Vaadin 12将对象传递给JavaScript的函数:不能编码类

如何将对象传递给 C++ 中的函数?

如何将对象传递给 .handlebars 模板并在 javascript 代码块中使用它?

将对象传递给 Java 中的不同库

在javascript中,我已将对象传递给ejs文件,但它仍然说对象为空

C++ 将对象传递给函数