Class literal中的自引用,并使用DOM元素进行实例化

时间:2018-05-19 18:57:09

标签: javascript javascript-objects

我试图访问元素的位置X和Y,以类文字(或任何其他可能的方式,如对象文字)创建,以及使用这些属性的方法,访问它们样式。



class ObjectScene {
  constructor(element) {
    this.element = element;
    let posX = this.element.offsetLeft;
    let posY = this.element.offsetTop;

    this.resetWall = () => {
      this.element.style.left = 'unset';
      this.element.style.right = '0px';
    }
  }
}

const wall = new ObjectScene(document.getElementById('wall'));
console.log(wall.posX);

<div class="wall" id="wall"></div>
&#13;
&#13;
&#13;

是因为posX和posY还没有引用DOM元素吗?我得到undefined和NaN试图console.log属性。

我这样做是因为我有3个函数使用所有相同的属性,位置,重置位置和类似的东西,但每个都有不同的DOM元素。所以这是我想干代码的一种方式。

1 个答案:

答案 0 :(得分:0)

posXposY只存在于构造函数的范围内。实际上,您创建的是变量,而不是对象的属性。

例如,您可以将它们分配给this,就像使用element一样,从而正确创建对象的属性。

&#13;
&#13;
class ObjectScene {
  constructor(element) {
    this.element = element;
    this.posX = this.element.offsetLeft;
    this.posY = this.element.offsetTop;

    this.resetWall = () => {
      this.element.style.left = 'unset';
      this.element.style.right = '0px';
    }
  }
}

const wall = new ObjectScene(document.getElementById('wall'));
console.log(wall.posX);
&#13;
<div class="wall" id="wall"></div>
&#13;
&#13;
&#13;