это.init не функция

#javascript #constructor #initialization

Вопрос:

Я делаю это для класса, и в тесте, который у них есть, говорится, что мой конструктор не инициализируется, поэтому я посмотрел это и нашел this.init() . Теперь я получаю «this.init() не является функцией, и я не уверен, почему.

Мой код:

 function CuboidMaker(length, width, height){
  const volume = () => {
    return this.length * this.width * this.height
  }

  const surfaceArea = () => {
    return 2 * (this.length * this.width   this.length * this.height   this.width * this.height)
  }

  this.length = length
  this.width = width
  this.height = height
  this.volume = volume
  this.surfaceArea = surfaceArea
  this.init()
}
 

Комментарии:

1. Ну, это означает init , что на объекте или его прототипе нет функции.

2. почему вы ожидаете this.init() , что будете работать, если вы нигде не определили init свойство? Ваш код выглядит нормально для меня, если вы просто удалите его, так что побудило вас добавить его?

3. Сбой теста говорит о том, что он может инициализировать конструктор. После того, как я погуглил, как это сделать, я наткнулся на крест init()

4. почему вы используете «функцию CuboidMaker ()», а не «класс CuboidMaker{}». Кроме того, если вы «делаете это для класса», вызовите конструктор в начале вашего класса.

Ответ №1:

Это просто потому, что вы не создаете новый экземпляр конструктора?

Кроме того, volume и surfaceArea являются обеими функциями и должны быть вызваны.

 function CuboidMaker(length, width, height){

  const volume = () => {
    return this.length * this.width * this.height;
  }

  const surfaceArea = () => {
    return 2 * (this.length * this.width   this.length * this.height   this.width * this.height);
  }

  this.length = length;
  this.width = width;
  this.height = height;
  this.volume = volume();
  this.surfaceArea = surfaceArea();

}

const a = new CuboidMaker(1, 2, 3);
console.log(a); 

Ответ №2:

Я думаю, что вы неправильно инициализируете свой класс. Попробуйте этот синтаксис :

 class CuboidMaker{
        constructor(length, width, height){
            this.length = length;
            this.width = width;
            this.height = height;
        }
        volume(){
          return this.length * this.width * this.height
        }
        surfaceArea(){
                return 2 * (this.length * this.width   this.length * this.height   this.width * this.height)
        }
    }
    
    let myCuboid = new CuboidMaker(1, 2, 3);
    console.log(myCuboid.volume());
    console.log(myCuboid.surfaceArea());