@evgemiil

Я правильно написал код по классам и наследованию?

Здесь класс Car должен содержать 3 свойства и 2 метода, класс SportCar должен наследоваться от Car.
Экземпляры класса SportCar должны также иметь все свойства и методы, которые есть у экземпляров класса Car, но кроме того должны содержать методы и свойства, своственные только этому классу.

После описания классов создать несколько экземпляров каждого класса и вызвать их методы, вывести их свойства.
function Car(name) {
	this.name = name;
	this.speed = 100;
	this.engine = "V6";
}

Car.prototype.rides = function() {
	alert(this.name +' '+ this.engine + " едет!")
}

Car.prototype.ridesspeed = function() {
	alert(this.speed + " км в час скорость "+this.name +' '+ this.engine)
}

function SportCar(name) {
	this.model = "M3";
	this.speedsp = 200;
	this.enginesp = "V10";
	Car.apply(this, arguments);
}

SportCar.prototype = Object.create(Car.prototype);

SportCar.prototype.constructor = SportCar;

SportCar.prototype.rides = function() {
  	Car.prototype.rides.apply(this);
  	alert( this.name +' '+ this.model +' '+ this.enginesp + " дрифтует!" );
};

SportCar.prototype.ridesspeedsport = function() {
	alert(this.speedsp + " км в час скорость " + this.name +' '+ this.model +' '+ this.enginesp)
}

var sportcar = new SportCar('BMW');
sportcar.rides();
sportcar.ridesspeed();
sportcar.ridesspeedsport();
  • Вопрос задан
  • 259 просмотров
Пригласить эксперта
Ответы на вопрос 3
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
В общем все правила прототипного наследования Вы соблюли:
1. Методы вынесены в прототип, свойства определяются в конструкторе
2. Прототип наследника === экземпляр родителя
3. В прототипе присутствует ссылка на текущий конструктор
Одно маленькое замечание, конструктор родителя из конструктора наследника лучше вызывать до манипуляций с this (es2015 классы например вообще не определяют this до вызова super, и правильно делают), вот тут:
function SportCar(name) {
  Car.apply(this, arguments);
  this.model = "M3";
  this.speedsp = 200;
  this.enginesp = "V10";
}
Ответ написан
Комментировать
Если напишут, что правильно, будет ли это значить, что ты понял тему и правильно выполнил задание?
Ответ написан
werty1001
@werty1001
undefined
// Общие св-ва и методы для всех машин сюда
var car = {
  rides: function() {
    alert( this.name + ' ' + this.engine + ' едет!')
  },
  ridesSpeed: function() {
    alert( this.speed + ' км в час скорость ' + this.name + ' ' + this.engine )
  }
};

// Только для спортивных сюда
function SportCar( name, speed, engine ) {
  this.__proto__ = car;
  this.name = name;
  this.speed = speed;
  this.engine = engine;
}

var bmw = new SportCar( 'BMW', 200, 'v6' );
Ответ написан
Ваш ответ на вопрос

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

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