*/

Cat.cats++;

/* Скрытые переменные и функции доступны только скрытым или привилегированным

функциям. Отметим, что 'name' и 'color', переданные в Class, уже являются

скрытыми переменными.

*/

var age = 0;

var legs = 4;

function growOlder(){

age++;

}

/*

Открытые переменные доступны открыто или скрыто

*/

this.weight = 1;

this.length = 5;

/*

Привилегированные функции доступны открыто или скрыто.

Могут обращаться к скрытым переменным.

Невозможно изменить, можно только заменить открытой версией

*/

this.age = function(){

if(age==0) this.length+=20;

growOlder();

this.weight++;

}

}

/*

Прототипированные функции доступны открыто

*/

Cat.prototype = {

talk: function(){ alert('Meow!'); },

callOver: function(){ alert(this.name+' ignores you'); },

pet: function(){ alert('Pet!'); }

}

/*

Прототипированные переменные доступны открыто.

Нельзя перезаписать, только заменить открытой версией

*/

Cat.prototype.species = 'Cat';

/*

Статические переменные и функции доступны открыто

*/

Cat.cats = 0;

Мы видим, что существует несколько уровней доступа. Как было сказано ранее, все скрытые, привилегированные и открытые функции и переменные копируются всякий раз, когда создается новый экземпляр объекта. Обычно почти все, что нужно сделать, можно реализовать с помощью прототипированных и открытых переменных. В связи с этим обычно лучше избегать использования скрытых, привилегированных и статических переменных, если это не требуется специально.

Лекция 9. Наследование и замыкание

Метод наследования. Полезные (и опасные) свойства замыкания.

В восьмой лекции были рассмотрены основы объектно-ориентированного программирования в 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. Эта

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату