не знаю почему выдает undefined

194
13 июля 2022, 04:40

когда вызываю row оно вдает "Input rown undefined"

let game = {
  pleyer: "x",
  board: board = [
    ["_", "_", "_"],
    ["_", "_", "_"],
    ["_", "_", "_"]
  ],
  boardStr: alert(this.board[0].join(" ") + "\n" + this.board[1].join(" ") + "\n" + this.board[2].join(" ")),
  winningCombinations: [
    [
      [0, 0],
      [0, 1],
      [0, 2]
    ],
    [
      [2, 0],
      [2, 1],
      [2, 2]
    ],
    [
      [1, 0],
      [1, 1],
      [1, 2]
    ],
    [
      [0, 0],
      [1, 1],
      [2, 2]
    ],
    [
      [0, 2],
      [1, 1],
      [2, 0]
    ],
    [
      [0, 0],
      [1, 0],
      [2, 0]
    ],
    [
      [0, 2],
      [1, 2],
      [2, 2]
    ],
    [
      [0, 1],
      [1, 1],
      [2, 1]
    ]
  ],
  row: +prompt("Input rown \n\n" + this.boardStr),
  colum: +prompt("Input column \n\n" + this.boardStr)
}
while (true) {
  game.boardStr();
  let row = game.row();
  let column = game.colum();
  if (board[row][column] !== "_") {
    alert("Wrong step. Try another one.");
  }
}

Answer 1

В приведенном коде несколько недочетов:

  1. неявное объявление переменной board:

    board: board = [
    

    здесь, перед инициализацией поля board создается глобальная переменная с тем же именем, которой так же присваивается массив.

  2. Попытка присвоить свойству результат выполнения функции alert

    boardStr: alert(this.board[0].join(" ") 
    

    так как alert ничего не возвращает, значением поля становится undefined.

  3. Попытка обратиться к объекту до его создания:

    boardStr: alert(this.board[0].join(" ") 
    

    внутри литерала объекта, нельзя сослаться на сам объект с помощью this, в данном случае this будет глобальным объектом. И, так как, в первом пункте указано, что создалась глобальная переменная board, здесь идет к ней обращение.

  4. Нет определенности чем должно быть поле boardStr. Исходя из названия, это должна быть строка, исходя и способов применения

    "Input rown \n\n" + this.boardStr
    

    это все еще строка, или

    game.boardStr();
    

    функция

  5. Аналогично 4 пункту, но для свойств row, col: данные поля используются и как функции и как числа/строки

Для исправления первых двух пунктов, достаточно убрать лишнее и

board: [

и использовать функцию, которая вернет строку с текущим состоянием:

boardStr: function() { return (this.board[0].join(" ") + "\n" + this.board[1].join(" ") + "\n" + this.board[2].join(" "))},

Для решения остальных недочетов, необходимо определиться, с тем, как будут использоваться указанные поля и исходя из этого исправить код.

READ ALSO
THREE.js задание связанное с mipmaps

THREE.js задание связанное с mipmaps

Есть задание связанное с mipmapsПо сути задание такого - есть 3Д фигура (допустим сфера) и при приближении камеры к фигуре начинает проявляться...

245
Отправка данных в url php

Отправка данных в url php

Стоит вопрос таков, как отправить данные из первой формы во вторую, во второй форме получить еще данные и отправить на третью страницу и все...

214
Как написать рекурсивную функцию, которая выводит ряд Фибоначчи

Как написать рекурсивную функцию, которая выводит ряд Фибоначчи

Необходимо написать рекурсивную функцию, которая будет выводить ряд Фибоначчи в консольНе понимаю, как это сделать

186
js Array.prototype.reduce() что значит =>?

js Array.prototype.reduce() что значит =>?

Нужно из двумерного массива [1, 2, [3, 4]] сделать одномерный var arr1 = [1, 2,3, 4];

180