Наследование в Javascript через prototype

программирование JavaScript

Базовая функция конструктор:

function Unit() {

var unit = this;

this.image = new Image();
this.positionX = !this.positionX ? 0 : this.positionX;
this.positionY = !this.positionY ? 0 : this.positionY;

this.draw = function(context2D) {
context2D.drawImage(this.image, this.positionX, this.positionY);
};

};

Создание экземпляра базового объекта:

var unit = new Unit();

Экземпляры классов для наследования:

function Gun() {

var gun = this;

gun.image.src = 'images/gun.png';
this.width = this.image.width;
this.height = this.image.height;
this.positionX = 170;
this.positionY = 550;

this.moveLeft = function(leftEdge, step) {
gun.positionX -= step;
gun.positionX = gun.positionX < leftEdge ? leftEdge : gun.positionX;
};

this.moveRight = function(rightEdge, step) {
gun.positionX += step;
gun.positionX = gun.positionX > (rightEdge - gun.width) ? rightEdge - gun.width : gun.positionX;
};

};

function Bullet(positionX, positionY) {

var bullet = this;

bullet.image.src = 'images/bullet.png';
this.positionX = positionX;
this.positionY = positionY;

};


Gun.prototype = unit;
Bullet.prototype = unit;

_____________________________________________________________________________

при создании объектов:

var gun = new Gun();
var bullet = new Bullet();
console.log(gun.image.src);
console.log(bullet.image.src);

результат:

file:///Z:/home/spaceinvader/public_html/images/bullet.png
file:///Z:/home/spaceinvader/public_html/images/bullet.png

_____________________________________________________________________________

при создании объектов:

var bullet = new Bullet();
var gun = new Gun();
console.log(gun.image.src);
console.log(bullet.image.src);

результат:

file:///Z:/home/spaceinvader/public_html/images/gun.png
file:///Z:/home/spaceinvader/public_html/images/gun.png


Почему при создании новых объектов переопределяется image.src ?
Ответы:
Вместо
Gun.prototype = unit;
Bullet.prototype = unit;
надо
Gun.prototype = new Unit();
Bullet.prototype = new Unit();


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.