函数如何容纳将不同对象作为参数传递的调用?

时间:2019-03-20 02:11:13

标签: javascript object variables parameters call

我对同一个函数有多个调用,每个调用都传递一个不同的options对象。例如:

function masterStart() {
  A(optionsA);
  A(optionsC);
}

我不知道如何编写函数A()中的代码以使用每个对象的传递参数?例如,如果仅使用对象optionsA,则可以通过编写A()在函数optionsA.soundFileName中访问它们。但是,当第二次调用A()并传递对象optionsC的参数时,我该怎么办?

这是我的代码的精简版,尚无法从objectC访问参数:

var optionsA = {
  soundFileName: 'audio/60.wav',
};

var optionsC = {
  soundFileName: 'audio/90.wav',
};

masterStart();

function masterStart() {
  A(optionsA);
  A(optionsC);
}

function A() {
  soundFileName = optionsA.soundFileName;
  console.log('soundFileName: ' + soundFileName)
  // This logs "audio/60.wav" twice instead of "audio/60.wav" and "audio/90.wav"

  // THE REST OF THE CODE THAT PLAYS AND LOOPS THESE SOUNDS SHOULD FOLLOW HERE
}
 

一个相关的问题:如果同时初始化A()C(),则有时仅运行一个函数,或者有时运行另一个函数的参数(以我的经验),因为javascript是单线程的。是否有比延迟初始化一个更好的解决方案(使我在这段代码中没有做到),而不是使它们准确执行?

1 个答案:

答案 0 :(得分:3)

您可以这样做

function A(params) {
  soundFileName = params.soundFileName
  // and the rest
}

或类似的

function A({soundFileName}) {
  console.log(soundFileName)
  //...
}

编辑:摘要

const optionsA = {
  soundFileName: 'audio/60.wav',
}

const optionsC = {
  soundFileName: 'audio/90.wav',
}

function A(params) {
  console.log("soundFileName: " + params.soundFileName)
}

A(optionsA)
A(optionsC)