函数可以在javascript中接收对象作为参数吗?

时间:2013-10-23 19:53:21

标签: javascript arrays object arguments

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

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

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

定义一个接受参数的函数

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

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

var myObject = {
    myFirstProp: "testing"
};

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

myNewFunc(myObject);

答案 2 :(得分:0)

你的括号被搞砸了,你调用了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);