Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Наследование (https://javascript.ru/forum/misc/48003-nasledovanie.html)

NORD 16.06.2014 01:02

Наследование
 
Здравствуйте пытаюсь разобраться с js пришел к наследованию, вообщем надо сделать так: A наследуется от B и С наследуется от А, то есть наследование 2 уровней, и что бы соответсвенно в C были поля и функции A и B. Это реально?

Aetae 16.06.2014 01:18

Упрощённо:
A = function(){};
A.prototype.A = function(){return 'A'};

B = function(){};
B.prototype = new A;
B.prototype.B = function(){return 'B'};

C = function(){};
C.prototype = new B;
C.prototype.C = function(){return 'C'};

a = new A;
b = new B;
c = new C;

alert(c.A() + c.B() + c.C())
A.prototype.A = function(){return 'A2'};
alert(c.A() + c.B() + c.C())
Но каждый толкует по своему, каждый пишет свои обёртки. Если погуглить на тему "javascript ооп" найдётся куча всяких вариантов.

Sweet 16.06.2014 01:33

Чистое js-наследование:
Child.prototype = Object.create(Parent.prototype, {
  constructor: {
    value: Child,
    enumerable: false
  }
});
Всё остальное - надстройки.

Sweet 16.06.2014 01:35

Цитата:

Сообщение от Sweet
Чистое js-наследование

Я имею ввиду в рамках ECMAScript 5.1, т.е. актуального на данный момент стандарта.

Aetae 16.06.2014 01:42

Ну це классика, да и ie8 ещё слегка актуален(зависит от сферы применения конечно).

NORD 16.06.2014 18:14

Спасибо! Когда делаю на простых примерах то все ок, а как пытаюсь перенести в "реал" ***, вообщем пытаюсь разобраться с движком Phaser, надо унаследовать класс от Phaser.Group унаследовал, все ок, а вот когда пытаюсь добавить еще один уровень, то есть унаследовать от унаследованного от Phaser.Group, то Phaser начинает ругаться...

function create()
{
   hero = new Hero(game);   
   hero.init(game.world.randomX, game.world.randomY, 0);
}

//====================================================================================//
Hero.prototype = Object.create(BasicObject.prototype);
function Hero(game)
{
   BasicObject.call(this, game);
   console.log("Hero Created!");
}

Hero.prototype.init = function(posX, posY, rot)
{
   this.sprite = new Phaser.Sprite(game, 'hero', 0, 0, 3);


   BasicObject.prototype.init.call(this, posX, posY, rot);
}


//====================================================================================//
BasicObject.prototype = Object.create(Phaser.Group.prototype);
function BasicObject(game)
{
   console.log("BasicObject Created!");


   Phaser.Group.call(this, game);


   this.container = null;
   this.sprite = null;
   this.timer = 100;
}

BasicObject.prototype.init = function(posX, posY, rot)
{
   if(this.sprite != null) this.add(this.sprite);

   this.x = posX;
   this.y = posY;
   this.angle = rot;
}


Ошибки:
TypeError: a.setStageReference is not a function phaser.min.js:3
TypeError: this.children[a].preUpdate is not a function phaser.min.js:7

То есть такое ощущение что при наследовании теряется часть сущности что ли... короче хз...

nerv_ 16.06.2014 21:08

http://javascript.ru/forum/offtopic/...kriptorov.html


Часовой пояс GMT +3, время: 23:14.