Наследование классов
Написать класс Cat, который наследуется от класcа Animal. Класс Animal имеет метод getName (name можно передать в конструктор). Класс Cat имеет метод meow (возвращает строку «Cat {catname} is sayig meow».
Пример использования: $cat = new Cat(‘garfield’); $cat->getName() === ‘garfield’ // true $cat->meow() === ‘Cat garfield is saying meow’ // true руководствуясь статьей учебника написал код, который не работает
var animal = { };
animal.getName = function(name) {
this.name = cat.name;
};
var cat = new cat('Garfield');
cat._proto_ = animal;
cat.meow = function() {
return "Cat" + this.name + "is saying meow";
};
alert( cat.meow );
Буду благодарен если укажете на ошибки и поможете сделать правильно |
Цитата:
Тебе надо хотя бы что-то типа этого:
function Cat(name) {
// Тут надо инициализировать объект
}
Cat.prototype = Object.create(Animal.prototype);
// На худой конец — Cat.__proto__ = Animal.__proto__;
У тебя же это:
/*
1. Вызываем функцию cat (которой не существует)
2. Результат кладем в переменную cat.
3. При попытке вызова п. 1 js ищет ф-цию cat, но находит неинициализированную перменную cat.
*/
var cat = new cat('Garfield');
/*
Никто так не делает, потому что этот способ устарел и не везде работает.
Но если используешь наследование через __proto__, то пиши его правильно (с двумя подчеркиваниями в начале и конце).
*/
cat._proto_ = animal;
/*
В принципе, это будет работать. Но лучше cat.__proto__.meow
*/
cat.meow = function() {
return "Cat" + this.name + "is saying meow";
};
Цитата:
|
Цитата:
Во-первых, Cat.__proto__ === Function.prototype && Animal.__proto__ === Function.prototype Во-вторых, прототип функции-конструктора не влияет на экземпляры. Цитата:
|
Цитата:
|
// Так я думаю можно?
function Animal() { animal.getName = function(name) { this.name = cat.name; }; function Cat() {} extend(Cat, Animal) Cat.prototype.meow = function(..) { cat.meow = function() { return "Cat" + this.name + "is saying meow"; }; alert( cat.meow ); } |
Griisha, чё за х**ню ты тут написал? И спасибо, что зарегился, а то без твоих бредней, форум был совсем не торт!
|
тема жива еще?
вот думаю єто заданиесделать кто то проверит код?
|
Для такой параши достаточно вот этого:
Animal={}
Cat=Object.create(Animal)
Cat.meow=function(){return "Cat "+this.name+" is saying meow"}
cat=Object.create(Cat)
cat.name="Garfield"
alert(cat.meow())
|
Ну знаешь новичку трдно найти таск. тем более такой для менятрудній
Цитата:
|
kaflan,
Собственно, там, в твоем юзкейсе, класс Animal вообще не нужен. Он может понадобиться, только если в дальнейшем собираешься расширять. Вот в таком, например случае, он действительно нужен
Animal={
say: function(){return this.kind +" "+ this.name + " saying "+this.word}
}
Cat=Object.create(Animal)
Cat.kind="Cat"
cat=Object.create(Cat)
cat.name="Garfield"
cat.word="meow"
Dog=Object.create(Animal)
Dog.kind="Dog"
dog=Object.create(Dog)
dog.name="Huy"
dog.word="gav"
alert(cat.say()+"\n"+dog.say())
|
|
| Часовой пояс GMT +3, время: 23:43. |