我可以访问 JavaScript 中对象的 this 吗?

Can I access this of an object in JavaScript?

var b = {
    state: 'initial',
    initial: {
        onClick: function() {
            console.log(this);
        },
        x: 0,
    },
}

嗨,我想知道是否可以在上面的代码中访问 onClick 函数中的 b 对象?

输出是 {x: 0, onClick: ƒ} 而不是 {state: 'initial', ... }

将其更改为箭头函数将改为输出 window 对象。

我正在制作一款密室逃脱游戏,有点像先有鸡还是先有蛋的情况。

var spriteObject =
{
  img: null,
  INITIAL: {
    sourceX: 0,
    sourceY: 0,
    sourceWidth: 64,
    sourceHeight: 64,
    x: 0,
    y: 0,
    width: 64,
    height: 64,
    isWithinBounds: function(x, y) {
      return x > this.x && x < this.x + this.width && y > this.y && y < this.y + this.height;
    },
  },
  
  state: 'INITIAL',
};
const inventoryItems = [];
let currentRoom = "kitchen";

const knife = {
  ...spriteObject,
  INITIAL: {
      ...spriteObject.INITIAL,
      x: 200,
      y: 162,
      sourceX: 1330,
      sourceY: 8,
      sourceWidth: 803,
      sourceHeight: 514,
      width: 803,
      height: 514,
      onClick: () => {
        inventoryItems.push(knife);
        layers.kitchen.sprites = layers.kitchen.sprites.filter(sprite => sprite !== knife);
      },
  },
  img: kitchenLayout,
};

const layers = {
  kitchen: {
    sprites: [knife],
  },
};

window.addEventListener("click", function(e) {
  const x = e.pageX - canvas.offsetLeft;
  const y = e.pageY - canvas.offsetTop;
  layers[currentRoom].sprites.forEach(sprite => {
    const currSprite = sprite[sprite.state];
    if (currSprite.onClick && currSprite.isWithinBounds(x, y)) {
      currSprite.onClick();
      render();
    }
  })
})

假设我有一间厨房,柜台上有一把刀。我可以拿起刀并将其放入我的库存中。这把刀有 3 种不同的情况:在柜台上(初始)、在库存中和钝了(使用后)。我不确定我是否想在库存中建模为一个状态,但我很难弄清楚如何从厨房的精灵列表中删除刀。它在上面的代码中是可行的,但它似乎依赖于我将 knife 声明为变量这一事实。我不想这样做,以防我想直接在 sprites 数组上声明我的项目。感谢任何提示,谢谢

您应该可以使用 javascript classes 来完成此操作。这样您就可以将当前的 class 引用为 this.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes