freeCodeCamp/curriculum/challenges/portuguese/02-javascript-algorithms-an.../object-oriented-programming/add-methods-after-inheritan...

3.0 KiB

id title challengeType forumTopicId dashedName
587d7db1367417b2b2512b87 Adicionar métodos após a herança 1 301315 add-methods-after-inheritance

--description--

Uma função construtora, ou simplesmente construtor, que herda seu objeto de prototype de uma função construtora de supertipo, além dos métodos herdados, ainda poderá ter seus próprios métodos.

Por exemplo, Bird é um construtor que herda seu prototype de Animal:

function Animal() { }
Animal.prototype.eat = function() {
  console.log("nom nom nom");
};
function Bird() { }
Bird.prototype = Object.create(Animal.prototype);
Bird.prototype.constructor = Bird;

Como adicional do que é herdado da classe Animal, você deseja adicionar o comportamento que é único de objetos Bird. Aqui, Bird definirá a função fly(). As funções são adicionadas ao Bird's prototype (protótipo do pássaro) da mesma forma que qualquer função construtora:

Bird.prototype.fly = function() {
  console.log("I'm flying!");
};

Agora as instâncias de Bird terão ambos os métodos, eat() e fly():

let duck = new Bird();
duck.eat();
duck.fly();

duck.eat() exibe no console a string nom nom nom, e duck.fly() mostra a string I'm flying!.

--instructions--

Adiciona todos os códigos necessários para que o objeto Dog herde de Animal e o prototype de construtor de Dog está definido para Dog. Então adiciona o método bark() para o objeto Dog para que um beagle possa eat() e bark(). O método bark() deveria imprimir no console a string: Woof!.

--hints--

Animal não deve possuir o método bark().

assert(typeof Animal.prototype.bark == 'undefined');

Dog deve herdar o método eat() de Animal.

assert(typeof Dog.prototype.eat == 'function');

O protótipo de Dog deve ter o método bark().

assert('bark' in Dog.prototype);

beagle deve ser uma instanceof de Animal.

assert(beagle instanceof Animal);

O construtor para beagle deve ser definido para Dog.

assert(beagle.constructor === Dog);

beagle.eat() deve mostrar no console a string nom nom nom

console.log = function (msg) {
  throw msg;
};
assert.throws(() => beagle.eat(), 'nom nom nom');

beagle.bark() deve mostrar no console a string nom nom nom

console.log = function (msg) {
  throw msg;
};
assert.throws(() => beagle.bark(), 'Woof!');

--seed--

--seed-contents--

function Animal() { }
Animal.prototype.eat = function() { console.log("nom nom nom"); };

function Dog() { }

// Only change code below this line




// Only change code above this line

let beagle = new Dog();

--solutions--

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();