Наследование классов
Написать класс 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, время: 17:27. |