DevGang
Авторизоваться

Выявление шаблона модуля в Javascript

Инкапсуляция не присуща Javascript. Нет модификаторов, таких как private и public которые помогают защитить объекты от нежелательного доступа. Это одна из причин, почему в JS важна область видимости функций. Каждая функция создает новую область видимости. Область видимости определяет видимость переменных внутри функции.

Например, в приведенном ниже фрагменте gridItems нельзя получить доступ к атрибуту GameBoard напрямую, если не используется метод получения / установки. Таким образом будет исключена возможность установки неверных значений элементов сетки.

Обратите внимание, что проверка победителей в строке, столбце и диагонали игрового поля недоступна для объектов, которые будут его импортировать. Только возвращенные функции GameBoard будут доступны за его пределами.

const GameBoard = (function() {
//no one can access this variable directly
    let gridItems = Array(9).fill('I');

    function resetBoard() {
        gridItems = Array(9).fill('I');
    }

    function setGridItemValue(index) {
        gridItems[index] = turn;
    }

    function getGridItems() {
        return gridItems.slice(0);
    }

    function checkWinner(board) {
        if(checkDraw(board)) {
            return "tie";
        }

        if(checkRowWin(board) || 
           checkColumnWin(board) || 
           checkDiagonalWin(board)) {
            return winner;
        }

        return null;
    }

    ...

    return {
        setGridItemValue,
        checkWinner,
        resetBoard,
        getGridItems,
    }
}());

Еще одна важная вещь, которую следует отметить в этом шаблоне, помимо инкапсуляции, - это использование IIFE (немедленно вызываемых функциональных выражений). Он запускается, как только он определен. Иногда ее называют самоисполняющейся анонимной функцией, которая состоит из двух частей:
A. Сама функция с оператором группировки.

(function () {
  statements
})

Б. Второй создает IIFE (), через который JS-движок будет напрямую интерпретировать функцию.

Вторая часть следит за тем, чтобы функция не вызывалась случайно, создавая таким образом множество объектов GameBoard. Чтобы использовать GameBoard, пользователь может просто вызвать общедоступные функции, т. е.

GameBoard.resetBoard();
GameBoard.checkWinner();

Теперь модуль GameBoard можно использовать в других частях JS-проектов. Проверьте использование функции GameBoard в этом репозитории.

Источник:

#JavaScript
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

Поделитесь своим опытом, расскажите о новом инструменте, библиотеке или фреймворке. Для этого не обязательно становится постоянным автором.

Попробовать

В подарок 100$ на счет при регистрации

Получить