【问题标题】:Can I access this of an object in JavaScript?我可以在 JavaScript 中访问对象的 this 吗?
【发布时间】:2022-01-03 14:31:25
【问题描述】:
var b = {
    state: 'initial',
    initial: {
        onClick: function() {
            console.log(this);
        },
        x: 0,
    },
}

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

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

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

我正在制作一个密室逃脱游戏,有点鸡和蛋的情况。

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 种不同的状态:柜台上(初始)、库存中和钝(使用后)。我不确定我是否想将库存建模为一个状态,但我无法弄清楚如何从厨房精灵列表中删除刀。它在上面的代码中是可行的,但它似乎依赖于我将刀声明为变量的事实。我不想这样做,以防我想直接在 sprites 数组上声明我的项目。我感谢任何提示,谢谢

【问题讨论】:

  • 为什么不像b.x那样直接使用b.whatyouneed
  • 稍后会调用一个函数,所以理论上是的,你可以按照当时的定义。
  • b.initial.onClick 不能等于 b.state 作为示例,最初因为它在初始化对象期间不存在,但如果你避免这样做,你会没事的;函数应该是 AOK。
  • thisonClick 调用期间的上下文将始终是对象binitial 对象。只要不提供父引用/链接作为b.initial 本身的直接属性,initial 就不会“知道” 其父结构。 arrow function 不能绑定任何 this 上下文。它具有词法范围。

标签: javascript object this


【解决方案1】:

您应该能够为此使用 javascript 类。这样您就可以将您当前的课程引用为this

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

【讨论】:

  • 请详细说明您将如何解决这个问题?我认为这将是让代码为他工作的影响最小的更改。但请指点我一个更好的方法。随时开放学习:)
猜你喜欢
  • 2011-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
  • 2023-03-16
  • 2016-02-26
  • 2018-09-27
相关资源
最近更新 更多