Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.08.2016, 18:35
Интересующийся
Отправить личное сообщение для Maine Посмотреть профиль Найти все сообщения от Maine
 
Регистрация: 23.02.2016
Сообщений: 19

Как правильно передавать аргументы в прототипы
Всем привет!
Нужно было создать функцию-класс Animal с методом getName, возвращающим name, потом второй класс Dog, который наследует от первого и имеет свой метод bark, возвращающий строку. Затем создать экземпляры класса Dog и применить к ним унаследованные от обоих классов методы. Вот что у меня получилось, выдает undefined. Не понимаю, как правильно передавать аргументы вот в этой строке: Dog.prototype = new Animal();
или проблема в чем-то другом...


function Animal(name) {
    this.getName = function() {
        return name;
    }
}


function Dog(dogname) {
    this.bark = function (dogname) {
        return ('Dog ' + dogname + ' is barking');
    }
}

Dog.prototype = new Animal();

var dog = new Dog('Balto');

console.log(dog.getName());
console.log(dog.bark());
Ответить с цитированием
  #2 (permalink)  
Старый 16.08.2016, 18:44
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

class Animal {
  constructor(name) {
  	this.name = name;
  }
}

class Dog extends Animal {
  constructor(name) {
  	super(name);
  }
  bark(dogName) {
  	return this.name + dogName;
  }
}


let dog = new Dog('Balto');
console.log(dog.name);
console.log(dog.bark('test'));
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 16.08.2016, 18:57
Интересующийся
Отправить личное сообщение для Maine Посмотреть профиль Найти все сообщения от Maine
 
Регистрация: 23.02.2016
Сообщений: 19

Спасибо!
А средствами ES5 это сделать невозможно?
Ответить с цитированием
  #4 (permalink)  
Старый 16.08.2016, 19:16
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 30,779

Maine,
function Animal(name) {
    this.name = name
}
Animal.prototype.getName =  function() {
        return this.name;
    }

function Dog(name) {
  this.name = name
  }

Dog.prototype = Animal.prototype;
Dog.prototype.bark = function () {
        return ('Dog ' + this.name + ' is barking');
    }
var dog = new Dog('Balto');

alert(dog.getName());
alert(dog.bark());
Ответить с цитированием
  #5 (permalink)  
Старый 16.08.2016, 19:39
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

рони, красава, теперь с любого конструируй

var dog = new Animal('Balto');

dog.bark();

/*
Dog Balto is barking
*/
Ответить с цитированием
  #6 (permalink)  
Старый 16.08.2016, 19:46
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Вот хрестоматийное решение задачки ТС.

function Animal() {
    this.getName = function() {
        return this.name;
    }
}

function Dog(name){
    this.name=name;
    this.bark = function () {
       return ('Dog ' + this.getName() + ' is barking');
   }
}

Dog.prototype = new Animal();

var dog = new Dog('Balto');

dog.bark();

/*
Dog Balto is barking
*/


PS Три раза правил. Абстрактные задачи суксь и маздай.

Последний раз редактировалось warren buffet, 16.08.2016 в 19:51.
Ответить с цитированием
  #7 (permalink)  
Старый 16.08.2016, 19:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 30,779

warren buffet,
хотелось бы так
var dog = new Dog('Balto');
Ответить с цитированием
  #8 (permalink)  
Старый 16.08.2016, 19:56
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

рони, да я вообще не понял чего ему надо, поэтому правил живьем. Просто твое уравнивание протитипов - противозаконно. Родитель не может наследовать свойства и методы отпрыска. Ты поломал систему ниппель вот так Dog = Animal. На практие так можно делать, если так надо, а ему так не надо, он задание списать должен.
Ответить с цитированием
  #9 (permalink)  
Старый 16.08.2016, 22:10
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,482

Наследование на классах. Функция extend
function extend(Child, Parent) {
	var F = function() { }
	F.prototype = Parent.prototype
	Child.prototype = new F()
	Child.prototype.constructor = Child
	Child.superclass = Parent.prototype
}

function Animal(name) {
	this.name = name;
}

Animal.prototype.getName = function() {
  return this.name;
}

function Dog(name){
	this.name = name;
}
extend(Dog, Animal);

Dog.prototype.bark = function () {
  return ('Dog ' + this.getName() + ' is barking');
}


var dog = new Dog('Balto');
console.log(dog.getName()); //Balto
console.log(dog.bark()); //Dog Balto is barking
Ответить с цитированием
  #10 (permalink)  
Старый 17.08.2016, 09:38
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Еще один умнег продублировавший конструктор в обоих объедках.

Короч, смотри ТС как все делается.

var Animal = function(name){

   this.getName=function(){return name}; /* видишь без this */
  
};

var Dog = function(name){

    var an = new Animal(name);
    an.bark=function(){return ('Dog ' + an.getName() + ' is barking');};

    return an;

};

var dog = Dog('Balto');

dog.bark();
/*
Dog Balto is barking
*/


И по бороде всю эту тряхомудию с прототипами.

Критика профессоров приветствуется. )))

Последний раз редактировалось warren buffet, 17.08.2016 в 09:41.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Событие click как правильно? piraids jQuery 9 20.08.2013 12:01
Пасоны, как правильно парсить параметры? megaupload Оффтопик 15 05.05.2013 13:44
Как правильно прицепить обработку события slowklg Events/DOM/Window 6 15.03.2012 14:20
Как правильно очистить maxlength в input? Маэстро Events/DOM/Window 10 22.06.2011 17:14
Как правильно оформить Send() Алекс97 AJAX и COMET 20 30.10.2008 18:19