не работает prompt()
var game = {
askStandartField: confirm("Стандартные настройки?"),
width: 10,
height: 10,
mineCount: 9,
standartField: (function() {
if (!game.askStandartField) {
game.width = prompt("Длина поля")
game.height = prompt("Высота поля");
game.mineCount = prompt("Кол-во мин:");
}
}
Вот весь код чтобы вы лучше понимали:
var game = {
askStandartField: confirm("Стандартные настройки?"),
width: 10,
height: 10,
mineCount: 9,
standartField: (function() {
if (!game.askStandartField) {
game.width = prompt("Длина поля")
game.height = prompt("Высота поля");
game.mineCount = prompt("Кол-во мин:");
}
})(),
openCount: 0,
field: [],
fillField: function() {
for (var x = 0; x < game.width; x++) {
var row = [];
game.field.push(row);
for (var y = 0; y < game.height; y++) {
row.push(new setCellState());
}
}
for (var i = 0; i < game.mineCount; i++) {
var xx = Math.floor(Math.random() * game.width);
var yy = Math.floor(Math.random() * game.height);
if (!game.field[xx][yy].isMine) {
game.field[xx][yy].isMine = true;
} else {
i--;
}
}
},
drawField: function() {
$("body").append("<table id = 'table'>");
for (var x = 0; x < game.width; x++) {
$("table").append("<tr>");
for (var y = 0; y < game.height; y++) {
$("tr:last-child").append(`<td class="${game.field[x][y].isMine?'isMine':''}">`);
}
}
}
};
game.fillField();
game.drawField();
$("td").click(function() {
$(this).addClass("isOpen");
});
Значения присваивающиеся полям литерала объекта вычисляются до того, как созданный объект присвоен указанной переменной, поэтому в случае
standartField: (function() {
if (!game.askStandartField) {
game.width = prompt("Длина поля")
game.height = prompt("Высота поля");
game.mineCount = prompt("Кол-во мин:");
}
})(),
Внутри вызванной функции game
будет undefined
, так как функция вызывается раньше.
Исправить ошибку можно несколькими способами:
убрать вызов функции при инициализации объекта:
standartField: (function() {
if (!game.askStandartField) {
game.width = prompt("Длина поля")
game.height = prompt("Высота поля");
game.mineCount = prompt("Кол-во мин:");
}
}),
и вызвать затем эту функцию: game.standartField();
вообще убрать из объекта эти ненужные поля, так как они не хранят состояние объекта, а только инициализируют его. например:
var game = {
width: 10,
height: 10,
mineCount: 9,
openCount: 0,
field: [],
fillField: function() {
for (var x = 0; x < game.width; x++) {
var row = [];
game.field.push(row);
for (var y = 0; y < game.height; y++) {
row.push(new setCellState());
}
}
for (var i = 0; i < game.mineCount; i++) {
var xx = Math.floor(Math.random() * game.width);
var yy = Math.floor(Math.random() * game.height);
if (!game.field[xx][yy].isMine) {
game.field[xx][yy].isMine = true;
} else {
i--;
}
}
},
drawField: function() {
$("body").append("<table id = 'table'>");
for (var x = 0; x < game.width; x++) {
$("table").append("<tr>");
for (var y = 0; y < game.height; y++) {
$("tr:last-child").append(`<td class="${game.field[x][y].isMine?'isMine':''}">`);
}
}
}
};
function standartField() {
if (!confirm("Стандартные настройки?")) {
game.width = prompt("Длина поля")
game.height = prompt("Высота поля");
game.mineCount = prompt("Кол-во мин:");
}
}
game.fillField();
game.drawField();
$("td").click(function() {
$(this).addClass("isOpen");
});
не использовать функцию, а инициализировать каждое поле отдельно:
var isStdFields = confirm("Стандартные настройки?");
var game = {
width: isStdFields ? 10 : prompt("Длина поля"),
height: isStdFields ? 10 : prompt("Высота поля"),
mineCount: isStdFields ? 9 : prompt("Кол-во мин:"),
openCount: 0,
field: [],
fillField: function() {
for (var x = 0; x < game.width; x++) {
var row = [];
game.field.push(row);
for (var y = 0; y < game.height; y++) {
row.push(new setCellState());
}
}
for (var i = 0; i < game.mineCount; i++) {
var xx = Math.floor(Math.random() * game.width);
var yy = Math.floor(Math.random() * game.height);
if (!game.field[xx][yy].isMine) {
game.field[xx][yy].isMine = true;
} else {
i--;
}
}
},
drawField: function() {
$("body").append("<table id = 'table'>");
for (var x = 0; x < game.width; x++) {
$("table").append("<tr>");
for (var y = 0; y < game.height; y++) {
$("tr:last-child").append(`<td class="${game.field[x][y].isMine?'isMine':''}">`);
}
}
}
};
game.fillField();
game.drawField();
$("td").click(function() {
$(this).addClass("isOpen");
});
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Подскажите, пожалуйста, есть ли у значащих типов деструкторы, и происходит ли вызов деструктора при удалении объекта из стека?