Как переопределить конструктор базового класса в Javascript - PullRequest
1 голос
/ 19 апреля 2019

На тренинге Udacity ES6 есть вопрос о переопределении конструктора базового класса.У меня есть решение, но Udacity не позволяет мне сойти с рук.

Назначение: Создать подкласс Bicycle, расширяющий класс Vehicle.Подкласс Bicycle должен переопределить функцию конструктора Транспортного средства, изменив значения по умолчанию для колес с 4 на 2 и звукового сигнала с 'beep beep' на 'honk honk'.

class Vehicle {
    constructor(color = 'blue', wheels = 4, horn = 'beep beep') {
        this.color = color;
        this.wheels = wheels;
        this.horn = horn;
    }

    honkHorn() {
        console.log(this.horn);
    }
}

// your code here


/* tests
const myVehicle = new Vehicle();
myVehicle.honkHorn(); // beep beep
const myBike = new Bicycle();
myBike.honkHorn(); // honk honk
*/

Решение, которое я придумаю, это:

class Bicycle extends Vehicle {
    constructor(wheels, horn){
        super(wheels, horn)
        this.wheels = 2
        this.horn = "honk honk" 
    }

    honkHorn(){
        super.honkHorn()
    }

}

Но этого недостаточно, и я не понимаю, почему это так.Обратная связь, которую я получил:

Ваш конструктор Bicycles не устанавливает значения по умолчанию для цвета, колес и рога

Ответы [ 2 ]

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

вы не должны использовать

    this.wheels = 2
    this.horn = "honk honk" 

, когда уже переопределяете их в супер-конструкторе.

class Vehicle {
	constructor(color = 'blue', wheels = 4, horn = 'beep beep') {
		this.color = color;
		this.wheels = wheels;
		this.horn = horn;
	}

	honkHorn() {
		console.log(this.horn);
	}
}

class Bicycle extends Vehicle {
	constructor(wheels = 2, horn = 'honk honk') {
		super(undefined, wheels, horn);
	}

	honkHorn() {
		super.honkHorn()
	}

}

let by = new Bicycle();
by.honkHorn();
0 голосов
/ 19 апреля 2019
class Bicycle extends Vehicle {
    constructor(wheels =2, horn= "honk honk"){
        super(undefined, wheels, horn)
    }

    honkHorn(){
        super.honkHorn()
    }

}

затем для теста я добавил:

const yourBike = new Bicycle(3, "tring tring")

Хотя другие варианты действительно дали правильные ответы для тестовых случаев, описанных в вопросе.Добавив этот дополнительный тест, я обнаружил, что переопределение конструктора базового класса невозможно ни из super, ни из this.wheels (как это было в моей первой попытке).

Однако Udacity не принимает его ......

...