Как назначить класс для innerHTML? - PullRequest
0 голосов
/ 03 октября 2019

У меня есть форма, и я хочу напечатать результат, когда нажимаю на кнопку. Я знаю, как присвоить innerHTML результат базовой функции, но что, если у меня есть класс?

У меня есть что-то вроде этого:


    Weight: <input type="number" id="weight" /><br/> Height: <input type="number" id="height" /><br/>

    <button type="button" id="submit">Submit</button>

    <span id="result"></span>


    class SomeClass {
        constructor() {
            this.number = 0;
            this.weight = document.getElementById('weight').value;
            this.height = document.getElementById('height').value;
        }

        FirstMethod() {
            if (this.weight < 10) {
                this.number += 1;
                return this.number;
            }
        }

        SecondMethod() {
            if (this.height < 10) {
                this.number += 2;
                return this.number;
            }
        }
    }

и сверху:


    document.getElementById('submit').addEventListener('click', result);

    function result() {
        let overall = new SomeClass().FirstMethod().SecondMethod().number;
        document.getElementById('result').innerHTML = overall;
    } 

Я получаю сообщение об ошибке «Uncaught TypeError: (промежуточное значение) .FirstMethod (...). SecondMethod не является функцией». Я пытался сделать это по-разному, и ничего не работает.

Ответы [ 2 ]

0 голосов
/ 03 октября 2019

Вы не можете использовать FirstMethod (). SecondMethod ()

попробуйте использовать

let my_object = new SomeClass();
my_object.FirstMethod();
my_object.SecondMethod();

document.getElementById('result').innerHTML = my_object.number
0 голосов
/ 03 октября 2019

Вы не можете зацепить вызов нового. Сначала вам нужно сохранить его как экземпляр в переменной.

 function result() {
        let overall = new SomeClass();
        overall = overall.FirstMethod().SecondMethod().number;
        document.getElementById('result').innerHTML = overall;
    } 

Но лучше сделать его неизменным:

 function result() {
        let overallInstance = new SomeClass();
        let overall = overallInstance.FirstMethod().SecondMethod().number;
        document.getElementById('result').innerHTML = overall;
    } 

Также я заметил, что вы возвращаете значение вFirstMethod (). Это должно вернуть сам экземпляр, чтобы разрешить цепочку вызовов.

...