我一直在阅读这本书,并且在艰辛和其他资源的帮助下,读完了这本书(仅这本书太难了,但它和其他资源一起仍然非常有用)。

这是我很难理解的代码:

function LifelikeWorld(map, legend) {
  World.call(this, map, legend);
}
LifelikeWorld.prototype = Object.create(World.prototype);

var actionTypes = Object.create(null);

LifelikeWorld.prototype.letAct = function(critter, vector) {
  var action = critter.act(new View(this, vector));
  var handled = action &&
    action.type in actionTypes &&
    actionTypes[action.type].call(this, critter,
                                  vector, action);
  if (!handled) {
    critter.energy -= 0.2;
    if (critter.energy <= 0)
      this.grid.set(vector, null);
  }
};


var actionTypes = Object.create(null); // actionTypes导致空对象绑定错误?

var handled,我无法理解该变量,我理解了这些概念,它是否检查action,actiontype是否正确?并且,actionTypes [action.type] => actionType不是空对象吗?

最佳答案

Object.create(null)null作为原型创建一个对象。这意味着与对象文字({})或new Object()不同,它不继承Object.prototype的属性。

handled变量为真时,true变量为actionactionTypes变量包含键action.type,并且actionTypes[action.type].call(this, critter, vector, action)返回真实值。

关于javascript - 第7章, Eloquent JavaScript:LifelikeWorld,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39017786/

10-12 03:29