JavaScript 对象作为参数

JavaScript object as parameter

我试图制作一个函数,在 HTML 文档中写入一些 div。一切正常,但我想尝试更改函数声明:

function writeDiv(divDOMelement, numberOfExcercises, numberOfTasksInEx);

像这样

function writeDiv(divDOMelement, {numberOfExcercises:N, numberOfTasksInEx:[v]}) 

需要说明的是,第一个声明工作得很好,但是当我尝试实现第二个声明并更改函数调用时,我收到了一个错误。

完整代码如下:

let open = false;
let currentlyOpen;

function writeDiv(divDOMelement, {numberOfExcercises:N, numberOfTasksInEx:[v]}) {
  for (let i = 0; i < numberOfExcercises.N; i++) {
    // ... didnt include the code that prints the divs on the site just to make it easier to read.
    for (let j = 0; j < numberOfTasksInEx.v[i]; j++) {
    // ... same as the first loop.
    }
  }
}


$(document).ready(function () {
  writeDiv("#mainDiv", {numberOfExcercises:3, numberOfTasksInEx:[5,2,3]});
});

澄清一下,这个 numberOfTasksInEx 应该是一个数组,数组的第一个元素告诉我第一个练习有那么多任务,第二个元素告诉我第二个练习有那么多任务,依此类推上。

我遇到的错误:

jQuery.Deferred exception: numberOfExcercises is not defined 
Uncaught ReferenceError: numberOfExcercises is not defined

您的声明语法不正确。您只需要:

function writeDiv(divDOMelement, {numberOfExcercises, numberOfTasksInEx})

然后在您的函数中,您将 numberOfExercises 作为总计数,numberOfTasksInEx 作为每次练习任务的数组。

声明语法在称为“分解”的过程中从作为第二个参数传递给函数的单个对象中提取这些属性。您版本中的 : 做了一些事情,但不是您的代码所期望的:它允许重命名源对象(实际参数)中的 属性 名称。这在这里并不是真正必要的,但是例如 numberOfExercises:N 意味着在您的函数中您将简单地引用 N,而不是 numberOfExercises.N.