Не работает консоль
Добры вечер,может кто подсказать почему не работает данная задача со скриптом? Условие функцию, которая возвращает первую цифру заданного целого числа
в виде английского слова. Примеры: 215 > "two", 4021 >"four" <!DOCTYPE html> <html> <head> <input id="input" /> <button id="btn">Answer</button> <div id="console"></div> <script src="/z3script.js"></script> </head> <body> class JsConsole { constructor(selector) { const consoleElement = document.querySelector(selector); if (consoleElement.className) { consoleElement.className = consoleElement.className + ' js-console'; } else { consoleElement.className = 'js-console'; } const textArea = document.createElement('p'); consoleElement.appendChild(textArea); } write = (text) => { const textLine = document.createElement('span'); textLine.innerHTML = text; textArea.appendChild(textLine); consoleElement.scrollTop = consoleElement.scrollHeight; }; writeLine = (text) => { this.write(text); textArea.appendChild(document.createElement('br')); }; read = (inputSelector) => { const element = document.querySelector(inputSelector); if (element.innerHTML) { return element.innerHTML; } else { return element.value; } }; readInteger = (inputSelector) => { const text = this.read(inputSelector); return parseInt(text); }; readFloat = (inputSelector) => { const text = this.read(inputSelector); return parseFloat(text); }; } jsConsole = new JsConsole('#console'); var word = [ 'ноль', 'один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять', ]; function lastdigit() { const num = jsConsole.readInteger('#numInput'); if (isNaN(num)) { jsConsole.writeLine('not number'); return; } const n = num.toString().split('').pop(); jsConsole.writeLine(word[n ?? 0]); } document.querySelector('#btn').onclick = lastdigit; |
Странно вы методы класса задаете.
А что такое #numInput в const num = jsConsole.readInteger('#numInput'); ? |
Цитата:
|
Цитата:
Цитата:
и в целом читать и переделывать https://learn.javascript.ru/class |
Помочь то можно. Но как?
Просто написать Вам программу? Вы должны понять свои ошибки. Изучить как задаются классы. Изучить понятие области видимости переменной ( в стр 18 textArea.appendChild(textLine); вы к какой переменной textArea обращаетесь? Уж не к той ле которая определена в функции constructor 11 const textArea = document.createElement('p'); ? А где можно обращаться к переменной, определенной внутри функции? ) Изучите стрелочные функции. Что такое this в стрелочной функции? (И их уж совсем нельзя делать методами класса) |
:write: дело было вечером...
<!DOCTYPE html> <html> <head> </head> <body> <input id="input" /> <button id="btn">Answer</button> <div id="console"></div> <script> class JsConsole { constructor(selector) { this.consoleElement = document.querySelector(selector); this.consoleElement.classList.add('js-console'); this.textArea = document.createElement('p'); this.consoleElement.appendChild(this.textArea); } write(text) { const textLine = document.createElement('span'); textLine.innerHTML = text; this.textArea.appendChild(textLine); this.consoleElement.scrollTop = this.consoleElement.scrollHeight; } writeLine(text) { this.write(text); this.textArea.appendChild(document.createElement('br')); } read(inputSelector) { const element = document.querySelector(inputSelector); if (element.innerHTML) { return element.innerHTML; } else { return element.value; } } readInteger(inputSelector) { const text = this.read(inputSelector); return parseInt(text); } readFloat(inputSelector) { const text = this.read(inputSelector); return parseFloat(text); } } jsConsole = new JsConsole('#console'); var word = [ 'ноль', 'один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять', ]; function lastdigit() { const num = jsConsole.readInteger('#input'); if (isNaN(num)) { jsConsole.writeLine('not number'); return; } const n = num.toString().split('')[0]; jsConsole.writeLine(word[n ?? 0]); } document.querySelector('#btn').onclick = lastdigit; </script> </body> </html> |
Если уж совсем учить, то класс можно начать так
(по модному) class JsConsole { consoleElement; textArea; constructor(selector) { this.consoleElement = document.querySelector(selector); this.consoleElement.classList.add('js-console'); this.textArea = document.createElement('p'); this.consoleElement.appendChild(this.textArea); } |
Цитата:
|
Цитата:
Цитата:
Во-первых поля класса (class fields - https://developer.mozilla.org/en-US/...nstance_fields) помогают читаемости кода. Ведь не обязательно все поля используются, инициализируются в конструкторе. Некоторые поля могут использоваться только в отдельных методах. А задание полей класса сразу показывает какие поля есть в классе. Какие в экземплярах класса, какие статические, какие приватные. Во-вторых это гарантирует, что при создании экземпляра класса все поля будут создаваться в определенном порядке - том, который указан при задании полей. Например class C { constructor () { this.a = 0; } set X (v) {this.x = v} set Y (v) {this.y = v} } const o1 = new C(); o1.X = 2; o1.Y = 3; const o2 = new C(); o1.Y = 3; o1.X = 2; Мы получили o1 = {a: 0, x:2, y:3} o2 = {a:0, y:3, x:2} С точки зрения самого js разницы особой нет. Но с точки зрения всех js машин (и v8 хрома, и в файрфоксе, и в сафари) разница большая. Эти объекты имеют разную внутреннюю структуру и оптимизация работы с такими объектами невозможна. А задание class C { a; x; y; constructor () { this.a = 0; } гарантирует, что все экземпляры класса будут иметь одинаковую структуру {a: x: y:} |
voraa,
Спасибо!!! |
Часовой пояс GMT +3, время: 14:11. |