JavaScript: как исправить экземпляр, которому не назначены значения свойств должным образом - PullRequest
1 голос
/ 21 апреля 2019

Я создаю экземпляр своего класса Piece и пытаюсь распечатать значение экземпляра quantity, но получаю неопределенное значение.

Я смотрю в консоли Google Chrome и console.log(temp) хорошо, но мне кажется, что не было назначено никаких значений свойств.(Я полагаю, что он должен показывать свойства и значения, если щелкнуть стрелку раскрывающегося списка экземпляра, правильно?)

У меня также console.log(length) и console.log(quantity), и они печатаются нормально.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Parker Steel Program</title>
    <link rel="stylesheet" href="./main.css">
    <script src="./form.js"></script>
    <script src="./order.js"></script>
</head>
<body>
    <h1>Parker Steel Company</h1>
    <h2>New Order</h2>
    <form id="order-info">
        <label for="stock-length">Stock Length:</label>
        <input autofocus="true" id="stock-length" name="stock-length" required="true" type="number">
        <fieldset id="line1" name="line-1">
            <label for="line-1-length">Length: </label>
            <input id="line-1-length" name="line-1-length" required="true" type="number">
            <label for="line-1-quantity">Quantity: </label>
            <input id="line-1-quantity" name="line-1-quantity" required="true" type="number">
            <button onclick="removePurchaseLine('line1')" type="button">Remove</button>
        </fieldset>
        <button id="add-purchase-line" name="add-purchase-line" onclick="addPurchaseLine()" type="button">Add Purchase Line</button>
        <button onclick="getBestCuttingSequence()" type="button">Calculate</button>
    </form>
</body>
</html>
class Piece {
    constuctor(length, quantity) {
        this.length = length;
        this.quantity = quantity;
    }
}

function getBestCuttingSequence() {
    const stockLength = document.getElementById("stock-length").value;
    const pieces = getPieces();
}

function getPieces() {
    const pieces = []
    const numPurchaseLines = document.getElementsByTagName("fieldset").length; 

    for (let purchaseLine = 1; purchaseLine <= numPurchaseLines; purchaseLine++) {
        let length = document.getElementById(`line-${purchaseLine}-length`).value;
        let quantity = document.getElementById(`line-${purchaseLine}-quantity`).value;
        let temp = new Piece(length, quantity);
        console.log(temp.length);
    }

    return pieces;
}

В конце концов, я буду помещать эти экземпляры в массив pieces, а затем использовать их позже.

Мой ожидаемый результат просто сможет console.log(temp.quantity) и распечатать егозначение.

В настоящее время печать не определена.

edit: изменены имена свойств.

1 Ответ

1 голос
/ 21 апреля 2019

Есть небольшая опечатка. constuctor отсутствует r. Поменяй что будет работать.

Однако вы добавляете свойства к this, не изменяя вас, вы можете передать объект, а затем Object.assign

class Piece {
    constructor(obj) {
        Object.assign(this,obj);
    }
}

И проходи вот так

let temp = new Piece({length, quantity});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...