Понимание и решение, почему это неинстанцированное свойство выдает ошибку? - PullRequest
0 голосов
/ 02 июня 2019

Объект, который я создал, (враги) ищет свойство другого объекта (shotArr [0] .x) это может или не может существовать. Он пытается сделать это через this.detect = function()

function Enemies(x,y,w,h) {
  this.x = x; this.w = w;
  this.y = y; this.h = h;
    this.draw = function(){ //how to paint
      ctx.shadowBlur= 0;//  shadow Blur
      ctx.shadowColor= 'red';
      ctx.fillStyle = 'rgb(200, 0, 0)';
      ctx.fillRect(this.x, this.y, this.w, this.h);
    }
    this.detect = function() {
      if (typeof (shotArr[0].x) === 'undefined') {
        return console.log('no bullets exist at the moment');
      } else {
        return shotArr[0].x;
      }
    }
    this.move = function() { //animation behavior
      this.y++;
    }
    this.send = function(){ //send to canvas
      this.draw();
      this.move();
      this.detect();
    }
}

Если пользователь не сделает снимок, нажав клавишу пробела, массив будет пустым и значение shotArr[0].x не будет. Приведенный выше экземпляр объекта, тем не менее, продолжит цикл метода функции this.detect и выдаст ошибку из-за невозможности найти свойство:

"Uncaught TypeError: Невозможно прочитать свойство 'x' из неопределенного"

Я думал, что нашел способ обработки ошибки в строке, которую я поместил в оператор if, чтобы определить, было ли свойство неопределенным?

Кроме того, как только снимок сделан, следующие строки этого же оператора if, отображающие существующее свойство, даже не выполняются, потому что ошибка постоянно возвращается.

Как я могу кодировать this.detect = function() таким образом, что если объект, который он ищет, не существует - он не выдаст ошибку. И если он существует - он возвращает запрашиваемое свойство?

...