Вызов функции для изменения положения объектов в массиве (JavaScript) - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь выяснить, как я могу использовать функцию для изменения значения индекса массива объекта при вызове функции, и я не могу понять, как это сделать. Вот что у меня есть:

var direction = ["North","East","South","West"];

var car = function() {
/* Class Constructor */
    this.cardinal = 0;
    this.currentDirection = direction[this.cardinal];
    this.showDirection = compass;
    this.turnRight = rightTurn;

function compass()
{
    document.write("<li>" + this.name + " is going " + this.direction + ".</li>");
}
function rightTurn()
{
    if (this.cardinal < 4) {
        this.cardinal = this.cardinal + 1;
        this.showDirection();
} else {
    this.cardinal = 0;
    this.showDirection();
}    
}

} // end car constructor

pontiac    = new car();

Позже я вызываю функцию buy, используя эту

pontiac.turnRight();

Объект имеет немного больше, но я удалил этот раздел, чтобы его было легче читать. Я могу добавить дополнительные биты при необходимости, но я не думаю, что это действительно имеет отношение к этому. Я знаю, что неправильно выполняю функцию rightTurn (). Я использовал цикл if else, потому что он мне нужен, чтобы вернуться на север, если машина находится на западе (поскольку это последняя позиция массива)

Любая помощь приветствуется!

Ответы [ 3 ]

0 голосов
/ 30 октября 2018

Надеюсь, это поможет вам

var car = function() {
        /* Class Constructor */
        this.directions = ["North","East","South","West"];
        this.currentIndex = 0;
        this.showDirection = compass;
        this.turnRight = rightTurn;
        this.name = "car"
        function compass()
        {   
            document.write("<li>" + this.name + " is going " + this.directions[this.currentIndex] + ".</li>");
        }

        function rightTurn()
        {   
            if (this.currentIndex == (this.directions.length-1)) {
                this.currentIndex = 0;
                this.showDirection();
            } else {
                this.currentIndex++;
                this.showDirection();
            }
        }
    } // end car constructor

    pontiac    = new car();
    pontiac.turnRight()

каждый раз, когда вы вызываете pontiac.turnRight (), вы устанавливаете текущее направление на правый элемент рядом, а когда вы доберетесь до «запада», вы вернетесь к «северу».

0 голосов
/ 30 октября 2018

Когда this.cardinal равно 3,

if (this.cardinal < 4) {
    this.cardinal = this.cardinal + 1;

позволяет ему становиться 4, индексируя вне массива (допустимые индексы 0, 1, 2 и 3).
Таким образом, вам нужно 3 в сравнении:

if (this.cardinal < 3) {
    this.cardinal = this.cardinal + 1;
0 голосов
/ 30 октября 2018

Помните, что this.direction должно быть this.direction везде внутри вашего класса. Если бы я был тобой, я бы изменил имя твоего массива с direction на cardinals или что-то подобное, чтобы ты не запутался.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...