#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());