MyTetra Share
Делитесь знаниями!
Классы в Java Script: Наследование на классах. Функция extend
Время создания: 05.01.2011 12:05
Раздел: Компьютер - Программирование - Java Script - Классы в JavaScript
Запись: xintrea/mytetra_syncro/master/base/0000003377/text.html на raw.github.com

Итак, мы уже знаем, для того чтобы объект класса Rabbit унаследовал от класса Animal, нужно:

  • Описать Animal
  • Описать Rabbit
  • Унаследовать кролика от объекта Animal:
    Rabbit.prototype = new Animal()

Однако, у такого подхода есть два недостатка:

  1. Для наследования создается совершенно лишний объект new Animal()
  2. Конструктор Animal должен предусматривать этот лишний вызов для и при необходимости делать такое "недоживотное", годное лишь на прототип.

К счастью, можно написать такую функцию, которая будет брать два класса и делать первый потомком второго:

function extend(Child, Parent) {

var F = function() { }

F.prototype = Parent.prototype

Child.prototype = new F()

Child.prototype.constructor = Child

Child.superclass = Parent.prototype

}

Использовать ее для наследования можно так:

// создали базовый класс

function Animal(..) { ... }

// создали класс

// и сделали его потомком базового

function Rabbit(..) { ... }

extend(Rabbit, Animal)

// добавили в класс Rabbit методы и свойства

Rabbit.prototype.run = function(..) { ... }

// все, теперь можно создавать объекты

// класса-потомка и использовать методы класса-родителя

rabbit = new Rabbit(..)

rabbit.animalMethod()

Функция очень удобная и работает "на ура". Она не создает лишних объектов и в качестве бонуса записывает класс-родитель в свойство потомка superclass - это удобно для вызова родительских методов в конструкторе и при перекрытии методов.

 
MyTetra Share v.0.59
Яндекс индекс цитирования