Как правильно передавать аргументы в прототипы
Всем привет!
Нужно было создать функцию-класс 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()); |
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')); |
Спасибо!
А средствами ES5 это сделать невозможно? |
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()); |
рони, красава, теперь с любого конструируй
var dog = new Animal('Balto'); dog.bark(); /* Dog Balto is barking */ |
Вот хрестоматийное решение задачки ТС.
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,
хотелось бы так var dog = new Dog('Balto'); |
рони, да я вообще не понял чего ему надо, поэтому правил живьем. Просто твое уравнивание протитипов - противозаконно. Родитель не может наследовать свойства и методы отпрыска. Ты поломал систему ниппель вот так Dog = Animal. На практие так можно делать, если так надо, а ему так не надо, он задание списать должен.
|
Наследование на классах. Функция 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 |
Еще один умнег продублировавший конструктор в обоих объедках.
Короч, смотри ТС как все делается. 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 */ И по бороде всю эту тряхомудию с прототипами. Критика профессоров приветствуется. ))) |
Часовой пояс GMT +3, время: 11:26. |