【问题标题】:Pass object to javascript function将对象传递给 javascript 函数
【发布时间】: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)

标签: function javascript-objects javascript


【解决方案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() 我的对象文字。 ...它已经被解析了! ...哦!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-04
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      • 1970-01-01
      • 2017-07-21
      • 2017-08-20
      相关资源
      最近更新 更多