Основы программирования на JavaScript


Наследование


В предыдущей лекции была создана функция 'Cat' :

function Cat(name){ this.name = name; } Cat.prototype = { species: 'Cat', talk: function(){ alert('Meow!'); }, callOver: function(){ alert(this.name+' ignores you'); }, pet: function(){ alert('Pet!'); } }

Теперь можно создать любое количество котов, но как быть, если мы захотим создать объект другого типа, например, собаку? В этом случае понадобится создать совершенно новую функцию, со своими собственными прототипами. Если два объекта используют одни и те же функции (например, можно было бы добавить функции sleep (спать), eat (есть), и play (играть)), то в результате мы бы имели чрезмерное дублирование кода. Решением является концепция наследования.

По сути наследование позволяет определить объекты "предки" и "потомки". Потомок наследует все свойства своего предка. Можно было создать, например, функцию "Animal", "Pet" или "Mammal". Обе функции Cat и Dog обладали бы многими свойствами функции предка Animal, и нам пришлось бы писать этот код один раз.

Проблема в том, что JavaScript не имеет в действительности встроенного механизма наследования, поэтому эту функциональность необходимо создавать самостоятельно. Для этого существует несколько различных способов. Один из них состоит в использовании функции "call". Эта функция позволяет вызывать одну функцию из контекста другой, т.е. мы можем определить, как действует ключевое слово "this". С помощью "call" можно написать класс Animal (Животное), а затем вызвать его из класса Cat или Dog.

function Animal(name){ this.name = name;

this.species = 'Animal'; this.sleep = function(){ alert(this.name+' спит: Хрррр'); } } function Cat(name){ Animal.call(this, name);

this.talk = function(){ alert('Мяу!'); } } function Dog(name){ Animal.call(this, name);

this.talk = function(){ alert('Гав!'); } }

var sam = new Cat('Sam'); var joe = new Dog('Joe'); sam.sleep(); // Sam спит: Хрррр joe.sleep(); // Joe спит: Хрррр




Начало    Вперед



Книжный магазин