duboloms
@duboloms
Люблю есть дубы с кетчупом. Веб-разработчик.

Почему не работает класс js?

Я создал класс который должен запоминать значения width и height, а потом с помощью функции geo() писать в консоли width и height который я задал классу:

class Canv {
  constructor(width, height) {
    this.width = width.width;
    this.height = height.height;
  }
  
  geometry() {
    console.log(this.width, this.height);
  }
}

const canv = new Canv({
  width: 50, // Задаю классу значение width
  height: 50 // Задаю классу значение height
});
canv.geometry(); // Должно вернуть: 50, 50

Но пишет в консоли браузера: Uncaught TypeError: Cannot read property 'height' of undefined.
Причем ошибка происходит не при вызове функции, а когда я в конструкторе задаю значение this.height = height.height;
Не могу понять что делать то?
  • Вопрос задан
  • 264 просмотра
Решения вопроса 3
hzzzzl
@hzzzzl
constructor(width, height) // принимает два значения

const canv = new Canv({ //  посылаешь объект, зачем
  width: 50
  height: 50
});

///////////

class Canv {
  constructor(width, height) {
    this.width = width;
    this.height = height;
  }
  
  geometry() {
    console.log(this.width, this.height);
  }
}

const canv = new Canv(50, 50);
canv.geometry(); // Должно вернуть: 50, 50
Ответ написан
@curious-101
Frontend developer
Вы передаёте один аргумент, объект, а в конструкторе принимаете 2 аргумента
Ответ написан
Seasle
@Seasle Куратор тега JavaScript
Вариант 1:
class Canv {
    constructor(width, height) {
        this.width = width;
        this.height = height;
    }
    ...
}

const canv = new Canv(50, 50);


Вариант 2:
class Canv {
    constructor({ width, height }) {
        this.width = width;
        this.height = height;
    }
    ...
}

const canv = new Canv({
    width: 50,
    height: 50
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@drawnofmymind
А в конструктор можно передавать параметры по умолчанию типо:
constructor(width = {}, height = {})

?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы