--- id: 587d7db1367417b2b2512b87 title: Add Methods After Inheritance challengeType: 1 forumTopicId: 301315 --- ## Description
A constructor function that inherits its prototype object from a supertype constructor function can still have its own methods in addition to inherited methods. For example, Bird is a constructor that inherits its prototype from Animal: ```js function Animal() { } Animal.prototype.eat = function() { console.log("nom nom nom"); }; function Bird() { } Bird.prototype = Object.create(Animal.prototype); Bird.prototype.constructor = Bird; ``` In addition to what is inherited from Animal, you want to add behavior that is unique to Bird objects. Here, Bird will get a fly() function. Functions are added to Bird's prototype the same way as any constructor function: ```js Bird.prototype.fly = function() { console.log("I'm flying!"); }; ``` Now instances of Bird will have both eat() and fly() methods: ```js let duck = new Bird(); duck.eat(); // prints "nom nom nom" duck.fly(); // prints "I'm flying!" ```
## Instructions
Add all necessary code so the Dog object inherits from Animal and the Dog's prototype constructor is set to Dog. Then add a bark() method to the Dog object so that beagle can both eat() and bark(). The bark() method should print "Woof!" to the console.
## Tests
```yml tests: - text: Animal should not respond to the bark() method. testString: assert(typeof Animal.prototype.bark == "undefined"); - text: Dog should inherit the eat() method from Animal. testString: assert(typeof Dog.prototype.eat == "function"); - text: Dog should have the bark() method as an own property. testString: assert(Dog.prototype.hasOwnProperty('bark')); - text: beagle should be an instanceof Animal. testString: assert(beagle instanceof Animal); - text: The constructor for beagle should be set to Dog. testString: assert(beagle.constructor === Dog); ```
## Challenge Seed
```js function Animal() { } Animal.prototype.eat = function() { console.log("nom nom nom"); }; function Dog() { } // Add your code below this line // Add your code above this line let beagle = new Dog(); beagle.eat(); // Should print "nom nom nom" beagle.bark(); // Should print "Woof!" ```
## Solution
```js function Animal() { } Animal.prototype.eat = function() { console.log("nom nom nom"); }; function Dog() { } Dog.prototype = Object.create(Animal.prototype); Dog.prototype.constructor = Dog; Dog.prototype.bark = function () { console.log('Woof!'); }; let beagle = new Dog(); beagle.eat(); beagle.bark(); ```