这个功能为Game Of Life项目做了什么

时间:2014-01-27 14:32:29

标签: javascript

我正在开发一个生命游戏项目。我被建议创建自己的迭代函数,这样我就可以在需要迭代时使用它。以下是此部分的当前代码:

var onCellClick = function (event) {

    // how to set the style of the cell when it's clicked
    if(this.className === "dead") {
      this.className = "alive";
    } else {
      this.className = "dead";
    }
  };

  //applies the onclick listener to the entire board.
  this.iterateCells(function(cell, x, y) {
    cell.onclick = onCellClick;
  });

  GameOfLife.prototype.iterateCells = function(iterator) {
  for(var y=0; y < this.height; y++) {
    for(var x=0; x < this.width; x++) {
      var currentCell = document.getElementById(x+"-"+y);
      iterator(currentCell, x, y);
    }
  }
};

我正在做的是为我的20/20网格中的每个单元格激活'onCellClick'功能。

我不确定

a)在迭代单元格函数中,作为参数传入的迭代器是什么?它的价值是什么?这是我最困惑的部分。

b)当this.iterateCells(function(cell,x,y)实际执行的函数是什么时,作为迭代器参数传递?

以下是该项目的链接,您需要了解更多内容http://jsfiddle.net/8Tut6/3/

1 个答案:

答案 0 :(得分:1)

函数是JavaScript中的一等公民,这意味着您可以将它们存储在变量中并将它们作为参数传递。例如:

// this function executes a function that is passed as a parameter
function execute(func)
{
    func();
}

function hello()
{
    alert("Hello, World!");
}

execute(hello);
execute(function () { alert("Hello again!"); });

此代码提醒“Hello,World!”然后“再次问好!”。

专门回答你的问题:

a)iteratorfunction(cell, x, y) { cell.onclick = onCellClick; }

b)iterateCells多次调用该函数。