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

问题描述 投票:0回答:1

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

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是单线程的。是否有一个更好的解决方案,使它们准确执行比延迟初始化(我在这段代码中没有做)?

javascript object variables parameters call
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.