2.8 KiB
id, title, challengeType, forumTopicId, dashedName
| id | title | challengeType | forumTopicId | dashedName |
|---|---|---|---|---|
| 587d7db1367417b2b2512b88 | Geerbte Methoden überschreiben | 1 | 301322 | override-inherited-methods |
--description--
In den vorherigen Aufgaben hast du gelernt, dass ein Objekt sein Verhalten (Methoden) von einem anderen Objekt erben kann, indem es dessen prototype-Objekt referenziert:
ChildObject.prototype = Object.create(ParentObject.prototype);
Dann erhielt das Kindobjekt (ChildObject) seine eigenen Methoden, indem es sie mit seinem prototype verkettete:
ChildObject.prototype.methodName = function() {...};
Es ist möglich, eine geerbte Methode außer Kraft zu setzen. Das geht auf die gleiche Weise - indem du eine Methode zu ChildObject.prototype hinzufügst, die den gleichen Namen trägt wie die Methode, die überschrieben werden soll. Hier ist ein Beispiel für Bird, das die von Animal geerbte Methode eat() überschreibt:
function Animal() { }
Animal.prototype.eat = function() {
return "nom nom nom";
};
function Bird() { }
Bird.prototype = Object.create(Animal.prototype);
Bird.prototype.eat = function() {
return "peck peck peck";
};
Wenn du eine Instanz let duck = new Bird(); hast und du rufst duck.eat() auf, so sucht JavaScript die Methode in der prototype-Kette von duck:
duck=> Isteat()hier definiert? Nein.Bird=> Isteat()hier definiert? => Ja. Führe sie aus und höre auf zu suchen.Animal=>eat()ist auch definiert, aber JavaScript hat die Suche abgebrochen, bevor diese Ebene erreicht wurde.- Object => JavaScript hat die Suche vor Erreichen dieses Levels beendet.
--instructions--
Überschreibe die Methode fly() für Penguin so, dass sie den String Alas, this is a flightless bird. zurückgibt.
--hints--
penguin.fly() sollte den String Alas, this is a flightless bird. zurückgeben.
assert(penguin.fly() === 'Alas, this is a flightless bird.');
Die Methode bird.fly() sollte den String I am flying! zurückgeben.
assert(new Bird().fly() === 'I am flying!');
--seed--
--seed-contents--
function Bird() { }
Bird.prototype.fly = function() { return "I am flying!"; };
function Penguin() { }
Penguin.prototype = Object.create(Bird.prototype);
Penguin.prototype.constructor = Penguin;
// Only change code below this line
// Only change code above this line
let penguin = new Penguin();
console.log(penguin.fly());
--solutions--
function Bird() { }
Bird.prototype.fly = function() { return "I am flying!"; };
function Penguin() { }
Penguin.prototype = Object.create(Bird.prototype);
Penguin.prototype.constructor = Penguin;
Penguin.prototype.fly = () => 'Alas, this is a flightless bird.';
let penguin = new Penguin();
console.log(penguin.fly());