【问题标题】:Can a function receive an object as an argument in javascript?函数可以在javascript中接收对象作为参数吗?
【发布时间】:2013-11-02 06:46:49
【问题描述】:
var currentbutton = {};
function setPreset(obj) {
    try{
        if(obj.name===name && obj.value===value){
            //log.error("preset array's OID at position ["+index+"]     is"+presets[index].name +" and the value stored is "+presets[index].value);
            currentbutton.name=obj.name;
            currentbutton.value=obj.value;
            log.error("currentbutton name= "+currentbutton.name+     "currentbutton value= " + currentbutton.value );
        }
        else
            log.error("adklafjklajkl");
    }
    catch(ie){
        log.error("couldn't set preset");
    }

presets.forEach(function(obj));

我知道我写的这段代码肯定有错误,首先,我被告知函数需要接收一个对象作为参数,我不知道如何将它传递给函数。我尝试了google,但没有找到任何有关函数是否可以接收对象作为参数的相关信息。 presets 是一个数组,其中包含具有两个属性(称为“名称”和“值”)的对象 基本上,数组 Presets 使用 forEach 遍历其枚举变量列表,并比较参数 obj 的名称和值是否与存储在数组中的任何对象相同,如果它们相同,则将当前按钮的名称和值设置为参数 obj 中的那个。然后我们将有其他功能可以在 currentbutton 上运行,我不必担心。 我知道这不是很清楚,因为我什至不确定这是否是我想要的。

【问题讨论】:

  • 是的,您可以将任何内容传递给函数调用。
  • 我如何将对象传递给函数呢?它应该像函数 setPreset(obj){} 吗?
  • 当然可以。 setPreset({name:"hello", value:"world"})。请注意,您的 forEach 循环完全搞砸了。
  • 最后一行代码没有任何意义。
  • 您是否缺少右括号? forEach 调用是否应该在 setPreset 的定义内?

标签: javascript arrays object arguments


【解决方案1】:

您不太了解forEach 的工作原理。 forEach 方法接受一个函数作为它的参数:

[1,2,3].forEach(function(item) {
    alert(item);
});

传递给forEach 的函数本身有一个参数。在这里,我将其命名为itemforEach 方法重复调用该函数,并在每次调用时提供数组的连续成员作为第一个参数。

现在,我可以使用一个变量来保存我的函数,而不是传入一个文字函数:

var alertStuff = function(item) {
    alert(item);
}

然后,我在forEach 中使用该函数(通过变量名引用它):

[1,2,3].forEach(alertStuff);

// is the same as...
[1,2,3].forEach(function(item) {
    alert(item);
});

因此,您想使用presets.forEach(setPreset);

【讨论】:

  • 感谢您花时间向我解释,如果我可以投票,请为您投票
【解决方案2】:

你的括号搞砸了,你调用了 forEach 错误。

var presets = [
  {name:'a', value:1},
  {name:'b', value:2},
  {name:'c', value:3},
];
var currentbutton = {};
function setPreset(obj) {
  try{
    if(obj.name===name && obj.value===value){
      //log.error("preset array's OID at position ["+index+"]     is"+presets[index].name +" and the value stored is "+presets[index].value);
      currentbutton.name=obj.name;
      currentbutton.value=obj.value;
      log.error("currentbutton name= "+currentbutton.name+     "currentbutton value= " + currentbutton.value );
    } else { // syntax error, opening { of else block was missing
      log.error("adklafjklajkl");
    }
  } // syntax error, closing } of try block was missing
  catch(ie){
    log.error("couldn't set preset");
  }
} // syntax error, closing } of function was missiong

presets.forEach(setPreset);

【讨论】:

    【解决方案3】:

    定义一个接受参数的函数

    function myNewFunc(obj){
      alert(obj.myFirstProp);
    }
    

    定义一个我们将作为参数传递给上述函数的对象

    var myObject = {
        myFirstProp: "testing"
    };
    

    调用函数并将对象作为参数传递

    myNewFunc(myObject);
    

    【讨论】:

      猜你喜欢
      • 2015-02-28
      • 2011-11-25
      • 1970-01-01
      • 2012-03-08
      • 2011-06-23
      • 2014-01-13
      • 1970-01-01
      相关资源
      最近更新 更多