![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Jul 2003
Адрес: Петербург
Сообщений: 432
|
Pet = function( name )
{
this.name = name;
}
Pet.prototype.legs = 4;
Pet.prototype.pet = true;
Dog = function( name ){
this.$_base = Pet;
this.$_base (name);
delete (this.$_base);
}
Dog.prototype.__proto__ = Pet.prototype;
Dog.prototype.price = 10;
rover = new Dog( "Rover" );
for(var i in rover){ trace( i + ":\t" + rover[i] ) }
Подскажите, пожалуйста, как rover получает свойство name. Я не понимаю как работает: this.$_base = Pet; this.$_base (name); delete (this.$_base); Почему просто this.Pet (name); - не читает? Что передается в случае this.Pet (name); ? |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
зачем так хитро ? :)
и вся эта заморочка с созданием и удалением this.$_base нужна была только для того чтобы в качестве this внутри функции Pet был тот же объект, который в качестве this внутри функции Dog. Последний раз редактировалось Nox Noctis; 20.11.2003 в 16:34. |
|
|||||
|
Bumble Bee
|
Цитата:
Dog.prototype.__proto__ = Pet.prototype; Цитата:
обычно чатаются свойства от созданных объектов на основе класса! в данном случае - это rover! trace(rover.legs); после создания надкласса можно проверить что Dog получил все свойства: myDog = new Dog(); trace(myDog.legs); Цитата:
определение надкласса как метода Dog с передачей аргумента - это понятно для чего!но для чего потом delete (this.$_base); мне не понятно! ![]()
__________________
Portfolio |
|
|||||
|
Регистрация: Jul 2003
Адрес: Петербург
Сообщений: 432
|
Nox Noctis и Пушистик - спасибо большое
Сейчас буду осмыслять... |
|
|||||
|
Регистрация: Jul 2003
Адрес: Петербург
Сообщений: 432
|
Dear Nox Noctis и Пушистик,
если разбирать this.$_base = Pet; this.$_base (name); delete (this.$_base); 1) rover получает свойство $_base со значением Pet (это что, правда такое значение может быть?) 2) rover вызывает метод Pet, передавая параметр name. 3) Pet навешивает на rover свойство name со значением параметра. 4) this.$_base удаляется как больше не нужный. Верно? Тогда почему нельзя написать просто this.Pet (name); ? |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
потому что в классе Dog НЕТУ такого метода - Pet...
я вообще-то не очень понимаю что имел в виду дебройль, написав такую запутку... не понятно зачем :) (можно цитату из книги ?) получается что ты временно содаешь метод в объекте класса Дог, потом после его вызова тут же его удаляешь... и при этом еще используешь прототип класса Pet как родительский для Dog... хотя только что использовал Pet как непонятно что, а не по оопшному назначению... короче фигня какая-то. все работает, это да, но нафига так ? :)) Последний раз редактировалось Nox Noctis; 20.11.2003 в 19:34. |
|
|||||
|
wanted
Регистрация: Sep 2002
Сообщений: 1,737
|
ааа.. дебройлевские примеры "Жизнь вокруг нас"...
на вскидку: Dog = function( name ){ this.$_base = Pet; this.$_base (name); delete (this.$_base); } Dog.prototype.__proto__ = Pet.prototype; это есть вызов для данного объекта конструктора родительского класса с передачей ему параметра; свойство name в Pet назначается и наследуется объектом класса Dog при его создании. все, конечно, очень условно, пример явно не слишком удачный. но это Дебройль -- -->обучение принципам. может, кто поправит? |
|
|||||
|
Регистрация: Jul 2003
Адрес: Петербург
Сообщений: 432
|
Nox Noctis,
Цитата:
Цитата:
Цитата:
|
|
|||||
|
wanted
Регистрация: Sep 2002
Сообщений: 1,737
|
да, я не мог сказать так красноречиво, как Дебройль =))))
то, что написано, по-моему, все объясняет и раскладывает по полочкам. dm_nev, может, мы тебе с чем-то конкретным поможем? какая проблема-то? ![]() |
![]() |
Часовой пояс GMT +4, время: 20:03. |
|
|
« Предыдущая тема | Следующая тема » |
|
|