Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.08.2014, 15:54
Новичок на форуме
Отправить личное сообщение для Panamaster Посмотреть профиль Найти все сообщения от Panamaster
 
Регистрация: 31.07.2014
Сообщений: 4

Наследование классов
Написать класс 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 );


Буду благодарен если укажете на ошибки и поможете сделать правильно
Ответить с цитированием
  #2 (permalink)  
Старый 05.08.2014, 20:23
Аватар для ixth
Профессор
Отправить личное сообщение для ixth Посмотреть профиль Найти все сообщения от ixth
 
Регистрация: 19.01.2010
Сообщений: 354

Цитата:
Написать класс Cat, который наследуется от класcа Animal.
Чтобы написать "класс", нужно прежде всего написать конструктор, т.е. функцию, которая создает объект. У тебя ее нет.
Тебе надо хотя бы что-то типа этого:

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";
};


Цитата:
руководствуясь статьей учебника написал код, который не работает
Статьей про prototype? Отдохни. Погуляй. Попей чаю. Перечитай.

Последний раз редактировалось ixth, 05.08.2014 в 20:25.
Ответить с цитированием
  #3 (permalink)  
Старый 05.08.2014, 21:12
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от ixth
Cat.prototype = Object.create(Animal.prototype);
// На худой конец — Cat.__proto__ = Animal.__proto__;
Вообще-то, разница огромная.
Во-первых,
Cat.__proto__ ===  Function.prototype && Animal.__proto__ ===  Function.prototype

Во-вторых, прототип функции-конструктора не влияет на экземпляры.
Сообщение от Panamaster
руководствуясь статьей учебника написал код, который не работает
Ты так говоришь, будто бы статья в этом виновата. Тема сложная, но разобраться - реально. Так что, перечитывай-вникай.
Ответить с цитированием
  #4 (permalink)  
Старый 05.08.2014, 21:19
Аватар для ixth
Профессор
Отправить личное сообщение для ixth Посмотреть профиль Найти все сообщения от ixth
 
Регистрация: 19.01.2010
Сообщений: 354

Сообщение от Sweet Посмотреть сообщение
Вообще-то, разница огромная.
Во-первых,
Cat.__proto__ ===  Function.prototype && Animal.__proto__ ===  Function.prototype
Во-вторых, прототип функции-конструктора не влияет на экземпляры.
Ну, не подумал, с кем не бывает. В любом случае, можно на готовых объектах установить __proto__ в Animal.prototype (если он правильный).
Ответить с цитированием
  #5 (permalink)  
Старый 06.08.2014, 10:09
Новичок на форуме
Отправить личное сообщение для Griisha Посмотреть профиль Найти все сообщения от Griisha
 
Регистрация: 06.08.2014
Сообщений: 1

// Так я думаю можно?
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 );
}
Ответить с цитированием
  #6 (permalink)  
Старый 06.08.2014, 10:32
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Griisha, чё за х**ню ты тут написал? И спасибо, что зарегился, а то без твоих бредней, форум был совсем не торт!
Ответить с цитированием
  #7 (permalink)  
Старый 16.11.2014, 00:51
Аспирант
Отправить личное сообщение для kaflan Посмотреть профиль Найти все сообщения от kaflan
 
Регистрация: 11.11.2014
Сообщений: 48

тема жива еще?
вот думаю єто заданиесделать кто то проверит код?
Ответить с цитированием
  #8 (permalink)  
Старый 16.11.2014, 01:53
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

Для такой параши достаточно вот этого:
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())

Последний раз редактировалось krutoy, 16.11.2014 в 01:57.
Ответить с цитированием
  #9 (permalink)  
Старый 16.11.2014, 02:01
Аспирант
Отправить личное сообщение для kaflan Посмотреть профиль Найти все сообщения от kaflan
 
Регистрация: 11.11.2014
Сообщений: 48

Ну знаешь новичку трдно найти таск. тем более такой для менятрудній
Сообщение от krutoy Посмотреть сообщение
Для такой параши достаточно вот этого:
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())
спасибо но я свое зафигачу. для начинающего сам смак
Ответить с цитированием
  #10 (permalink)  
Старый 16.11.2014, 02:16
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

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())
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
node-custom-errors: создание своих классов исключений vasa_c Ваши сайты и скрипты 2 02.12.2013 12:49
Использование классов в JavaScript devote Ваши сайты и скрипты 70 01.02.2013 17:17
Наследование функционала классов атомарных типов FINoM Общие вопросы Javascript 8 14.01.2012 18:39
Наследование в CSS SunnyDay (X)HTML/CSS 14 06.10.2008 20:06
наследование установок динамически создаваемыми элементами majestic jQuery 1 15.09.2008 13:21