Я пишу ответ another question.Является ли это правильным способом реализации перечисления?
Я не уверен, что моя реализация перечисления в порядке. Я расскажу об этом через мгновение. Пожалуйста, просмотрите его и скажите, могу ли я сделать что-то лучше.
Этот маленький прототип (codepen) включает в себя рисование шахматной доски и шахматных фигур. Есть 6 белых и 6 черных шахматных фигур. Для каждого из них мне нужно сохранить его имя (например, "White Bishop"
) и код Юникода (что-то вроде "\u2654"
). Итак, я определил переменную pieces
следующим образом: (Существует также часть NONE
, что оказалось полезным для пустых квадратов на доске)
var pieces = {
NONE : {name: "None", code: " "},
WHITE_KING : {name: "White King", code: "\u2654"},
WHITE_QUEEN : {name: "White Queen", code: "\u2655"},
WHITE_ROOK : {name: "White Rook", code: "\u2656"},
WHITE_BISHOP : {name: "White Bishop", code: "\u2657"},
WHITE_KNIGHT : {name: "White Knight", code: "\u2658"},
WHITE_POWN : {name: "White Pown", code: "\u2659"},
BLACK_KING : {name: "Black King", code: "\u265A"},
BLACK_QUEEN : {name: "Black Queen", code: "\u265B"},
BLACK_ROOK : {name: "Black Rook", code: "\u265C"},
BLACK_BISHOP : {name: "Black Bishop", code: "\u265D"},
BLACK_KNIGHT : {name: "Black Knight", code: "\u265E"},
BLACK_POWN : {name: "Black Pown", code: "\u265F"},
};
я хранить данные о распределении всех частей на борту в массиве под названием доска, это инициализация этого массива:
var board =[];
for(var i = 0; i < boardDimension*boardDimension; i++) {
board.push({
x: i % boardDimension,
y: Math.floor(i/boardDimension),
piece: pieces.NONE
});
};
board[0].piece = pieces.BLACK_ROOK
board[1].piece = pieces.BLACK_KNIGHT
board[2].piece = pieces.BLACK_BISHOP
board[3].piece = pieces.BLACK_QUEEN
board[4].piece = pieces.BLACK_KING
board[5].piece = pieces.BLACK_BISHOP
board[6].piece = pieces.BLACK_KNIGHT
board[7].piece = pieces.BLACK_ROOK
board[8].piece = pieces.BLACK_POWN
board[9].piece = pieces.BLACK_POWN
board[10].piece = pieces.BLACK_POWN
board[11].piece = pieces.BLACK_POWN
board[12].piece = pieces.BLACK_POWN
board[13].piece = pieces.BLACK_POWN
board[14].piece = pieces.BLACK_POWN
board[15].piece = pieces.BLACK_POWN
board[6*8 + 0].piece = pieces.WHITE_POWN
board[6*8 + 1].piece = pieces.WHITE_POWN
board[6*8 + 2].piece = pieces.WHITE_POWN
board[6*8 + 3].piece = pieces.WHITE_POWN
board[6*8 + 4].piece = pieces.WHITE_POWN
board[6*8 + 5].piece = pieces.WHITE_POWN
board[6*8 + 6].piece = pieces.WHITE_POWN
board[6*8 + 7].piece = pieces.WHITE_POWN
board[7*8 + 0].piece = pieces.WHITE_ROOK
board[7*8 + 1].piece = pieces.WHITE_KNIGHT
board[7*8 + 2].piece = pieces.WHITE_BISHOP
board[7*8 + 3].piece = pieces.WHITE_QUEEN
board[7*8 + 4].piece = pieces.WHITE_KING
board[7*8 + 5].piece = pieces.WHITE_BISHOP
board[7*8 + 6].piece = pieces.WHITE_KNIGHT
board[7*8 + 7].piece = pieces.WHITE_ROOK
И глубоко в коде, эти данные используются следующим образом:
svg.append("text")
.attr("x", function (d) {
return d.x*fieldSize;
})
.attr("y", function (d) {
return d.y*fieldSize;
})
.style("font-size", "40")
.attr("text-anchor", "middle")
.attr("dy", "35px")
.attr("dx", "20px")
.text(function (d) {
return d.piece.code;
})
.append("title")
.text(function(d) {
return d.piece.name;
});
Я правильно определил и использовал перечисление?
Что вы использовали - это объект, и в javascript ничего не называется enum, и если вы достигли своей работы так, как хотите, тогда она должна быть правильной. –
@AmitJoki Хорошо, но я имел в виду перечисление в концептуальном смысле. Может быть, я должен полностью очистить себя от этой концепции, при программировании на JavaScript? – VividD
роза с любым другим названием; он делает то, что вы хотите. В «реальных» перечислениях вы традиционно (следовательно, eNUMeration) получаете числовое значение, и вам обычно не нужно указывать числа: они автоматически увеличиваются в базовом синтаксисе. но опять же, взаимодействие между перечислениями и тем, что у вас есть, очень сопоставимо. также не забывайте, что вы можете сказать a = b = c = 1, чтобы сократить повторение при назначении общих значений во многих местах. – dandavis