Marfaldo
Marfaldo

Reputation: 53

"Expected 'this' to be used by class method"

I have an error from ESlint, but I don´t understand why. I have read these:

and this:

I still don't understanding what am I doing wrong.

My class

/* eslint-disable no-plusplus */
/* eslint-disable no-undef */
class Player {
  constructor(imagePlayer, name, score, positionY, positionX) {
    this.imagePlayer = imagePlayer;
    this.name = name;
    this.score = score;
    this.x = positionX;
    this.y = positionY;
  }

  drawPlayer() {
    app.map.mapGame[this.y][this.x] = this.imagePlayer;
  }

  obstacle(y, x) {
    let colision = false;
    if (app.map.mapGame[y][x] === 1) {
      console.log("evaluación");
      colision = true;
    }
    return colision;
  }

  lastPosition(oldPosition, direction) {
    if (direction === left || direction === right) {
      app.map.mapGame[this.y][this.x - oldPosition] = 0;
    } else {
      app.map.mapGame[this.y - oldPosition][this.x] = 0;
    }
  }

  // movements players
  movement(direction) {
    switch (direction) {
      case up:
        if (this.y > 0) {
          if (this.obstacle(this.y - 1, this.x) === false) {
            this.y--;
            this.lastPosition(-1, direction);
          }
        }
        break;

      case down:
        if (this.y < 9) {
          if (this.obstacle(this.y + 1, this.x) === false) {
            this.y++;
            this.lastPosition(+1, direction);
          }
        }
        break;

      case left:
        if (this.x > 0) {
          this.x--;
          this.lastPosition(-1, direction);
        }
        break;

      case right:
        if (this.x < 14) {
          this.x++;
          this.lastPosition(+1, direction);
        }
        break;

      default:
        console.log("muro");
        break;
    }
  } // movement
}

Error:
Expected 'this' to be used by class method 'obstacle

The obstacle method isn't settled on the full cases just on two of them.

Upvotes: 3

Views: 10629

Answers (1)

Bergi
Bergi

Reputation: 664599

The linter is complaining that a method that doesn't use the instance it was called on (this) shouldn't be an instance method in the first place. It's a bad practice.

You either

  • should make it a static method, to be called as Player.obstacle(x, y) (and probably be renamed to checkGlobalMapForObstacle)
  • should move the method to the Map class where it belongs, as it is checking coordinates against the map contents (this.mapGame[x][y]).

Upvotes: 5

Related Questions