TypeError: Cannot assign to read only property #39;0#39; of string(TypeError:无法分配给字符串的只读属性#39;0#39;)
本文介绍了TypeError:无法分配给字符串的只读属性';0';的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在开发一款终端游戏。游戏场地被字段(░)和洞(O)占据
该字段是随机生成的,但我还希望确保路径字符(*)始终位于该字段的左上角(由一定数量的数组组成) 为此,我将第一个数组的第一个索引分配给了pathCharacter(*)。请参阅下面的代码:
数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">String.prototype.replaceAt = function(index, replacement) {
return this.substr(0, index) + replacement + this.substr(index + replacement.length);
}
hat = '^';
hole = 'O';
fieldCharacter = '░';
pathCharacter = '*';
class Field {
constructor(field) {
this._field = field;
}
print() {
this._field = field.join('
');
console.log(this._field.replace(/,/g, ''))
}
static generateField(height, width) {
let finalArray = []
for (let i = 0; i < height; i++) {
finalArray.push(fieldCharacter.repeat(width));
}
for (let i = 0; i < finalArray.length; i++) {
let randomHoleX = Math.floor(Math.random() * width);
let randomHoleY = Math.floor(Math.random() * height);
finalArray[randomHoleY] = finalArray[randomHoleY].replaceAt(randomHoleX, hole);
}
// what I tried to do
finalArray[0][0] = pathCharacter;
return finalArray.join('
').replace(/,/g, '');
}
}
console.log(Field.generateField(5, 10));
输出内容:类型错误:无法分配给字符串‘░░O░░░░░░O’的只读属性‘0’
我想要的示例:
*░░O░░░░░O
░░░░░░░░░░
░░░░O░░░░░
░░░░░░░░░░
░░░O░O░░░░
推荐答案
有许多我需要解决的问题。
- 首先,您确实不应该向
String.prototype添加您自己的方法;如果您想要任何类型的可维护性,那么这种方法就是疯狂的。 - 第二,您的
print()方法不能工作(它引用隐式全局field来修改实例字段_field),但这并不意味着您无论如何都在使用它。 - 您可能应该使用数组数组而不是字符串,以减少操作的笨拙。
- 您不需要
Field的类:
const hat = "^";
const hole = "O";
const fieldCharacter = "░";
const pathCharacter = "*";
function generateField(height, width) {
const field = [];
for (let y = 0; y < height; y++) {
field.push(Array.from(fieldCharacter.repeat(width)));
}
for (let y = 0; y < field.length; y++) {
const randomHoleY = Math.floor(Math.random() * height);
const randomHoleX = Math.floor(Math.random() * width);
field[randomHoleY][randomHoleX] = hole;
}
field[0][0] = pathCharacter;
return field;
}
function printField(field) {
for (let y = 0; y < field.length; y++) {
console.log(field[y].join(""));
}
}
const field = generateField(5, 10);
printField(field);
此输出
*░░░░░░░░░
░░O░░░░░░░
░░░░O░░░░░
░░░░░░░░░░
O░O░░░O░░░
这篇关于TypeError:无法分配给字符串的只读属性';0';的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
编程基础网
本文标题为:TypeError:无法分配给字符串的只读属性';0';
基础教程推荐
猜你喜欢
- 在 Javascript 中使用 Fetch API 上传文件并显示进度 2022-01-01
- 从快速中间件中排除路由 2022-01-01
- 使用 jQuery 在悬停时交换 DIV 类 2022-01-01
- 即使每次插入第一个输入的值不同,第二个输入仍显示相同的输入值 2022-01-01
- 逻辑运算符 ||在 javascript 中,0 代表 Boolean false? 2022-01-01
- 带角度的选项卡:仅使用 $http 在单击时加载选项卡 2022-01-01
- CORS:当凭据标志为真时,无法在 Access-Control-Allow-Origin 中使用通配符 2022-01-01
- 最佳动态 JavaScript/JQuery 网格 2022-01-01
- 当木偶师打开Chrome时,不能使用Chrome扩展 2022-01-01
- HTML5 画布调整为父级 2022-01-01
