【问题标题】:Chapter 7, eloquent JavaScript: LifelikeWorld第 7 章,雄辩的 JavaScript:LifelikeWorld
【发布时间】:2016-12-25 08:38:36
【问题描述】:

我一直在阅读这本书,并在经历了很多艰辛和其他资源之后才读到这里(单靠它太难了,但它仍然很有用,以及其他资源)。

这是我觉得很难理解的代码:

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 不是空对象?

【问题讨论】:

    标签: javascript class oop prototype javascript-objects


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-12-04
      • 2023-04-01
      • 2020-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 2020-08-20
      相关资源
      最近更新 更多