Хотя это работает, мы немного
sam.talk(); // Мяу! joe.talk(); // Гав!
Хотя это работает, мы немного ограничены в своих возможностях. Например, прототипирование не действует при использовании этого метода: все прототипы, заданные на Animal, не будут переноситься в функции Cat или Dog. Как мы знаем из предыдущей лекции, определенные внутренне с помощью "this." функции создают новый экземпляр всякий раз при создании новой копии предка. В этом случае всякий раз при создании функции Animal, Cat или Dog появляется новая копия функций species и sleep. Как можно догадаться, это не самый эффективный способ.
Лучшим подходом является прототипирование всего родительского класса на классе-потомке. Это предоставляет доступ ко всем свойствам и методам класса предка:
function Animal(name){ this.name = name; } Animal.prototype = { species: 'Animal', sleep : function(){ alert(this.name+' спит: Хрррр'); } }
function Cat(name){ Animal.apply(this, arguments); } Cat.prototype = new Animal; Cat.prototype.species = 'Cat'; Cat.prototype.talk = function(){ alert('Мяу!'); }
function Dog(name){ Animal.apply(this, arguments); } Dog.prototype = new Animal; Dog.prototype.talk = function(){ alert('Гав!'); }
var sam = new Cat('Sam'); var joe = new Dog('Joe');
sam.sleep(); // Sam спит : Хрррр joe.sleep(); // Joe спит: Хрррр
alert(sam.species); // Cat alert(joe.species); // Animal - для Dog функция species не определена
Можно продолжить это дальше и создать отдельные функции для различных пород собак или кошек и т.д.
on_load_lecture()




1
|
2
|
»
учебники
|
для печати и PDA



Курсы | Учебные программы | Учебники | Новости | Форум | Помощь Телефон: +7 (495) 253-9312, 253-9313, факс: +7 (495) 253-9310, email: info@intuit.ru © 2003-2007, INTUIT.ru::Интернет-Университет Информационных Технологий - дистанционное образование |
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий