Hey liebe Entwickler! Nachdem ich jahrelang mit der klassenbasierten Vererbung von PHP gearbeitet hatte, fühlte es sich an, als würde ich in die prototypische Vererbung von JavaScript eintauchen und lernen, mit der linken Hand zu schreiben. Heute möchte ich teilen, was ich über diesen einzigartigen Vererbungsansatz gelernt habe, der JavaScript zu etwas Besonderem macht.
Im Gegensatz zu PHP oder Java, wo wir mit Klassen arbeiten, verwendet JavaScript Prototypen. Jedes Objekt in JavaScript verfügt über einen internen Link zu einem anderen Objekt, das als „Prototyp“ bezeichnet wird. Betrachten Sie es als einen Fallback-Mechanismus – wenn Sie versuchen, auf eine Eigenschaft zuzugreifen, die in einem Objekt nicht vorhanden ist, sucht JavaScript im Prototyp des Objekts danach.
const pet = { makeSound() { return "Some generic sound"; } }; const cat = { purr() { return "Purrrr"; } }; // Set pet as the prototype of cat Object.setPrototypeOf(cat, pet); // Now cat can use methods from pet console.log(cat.makeSound()); // "Some generic sound" console.log(cat.purr()); // "Purrrr"
Hier wird es interessant. Prototypen können ihre eigenen Prototypen haben und so die sogenannte „Prototypenkette“ bilden. JavaScript durchsucht diese Kette so lange, bis es findet, was es braucht, oder auf einen Null-Prototyp trifft.
const animal = { eat() { return "Nom nom nom"; } }; const pet = { makeSound() { return "Some generic sound"; } }; const cat = { purr() { return "Purrrr"; } }; Object.setPrototypeOf(pet, animal); Object.setPrototypeOf(cat, pet); // cat can now access methods from both pet and animal console.log(cat.purr()); // "Purrrr" console.log(cat.makeSound()); // "Some generic sound" console.log(cat.eat()); // "Nom nom nom"
Wenn Sie eine klassenbasierte Sprache wie PHP verwenden, kommt Ihnen das Konstruktormuster möglicherweise bekannter vor:
function Animal(name) { this.name = name; } Animal.prototype.eat = function() { return `${this.name} is eating`; }; function Cat(name) { Animal.call(this, name); } // Set up inheritance Cat.prototype = Object.create(Animal.prototype); Cat.prototype.constructor = Cat; Cat.prototype.purr = function() { return `${this.name} says purrrr`; }; const felix = new Cat("Felix"); console.log(felix.eat()); // "Felix is eating" console.log(felix.purr()); // "Felix says purrrr"
ES6 führte die Klassensyntax ein, die PHP-Entwicklern vielleicht bekannt vorkommt. Aber lassen Sie sich nicht täuschen – es geht nur um syntaktischen Zucker über prototypische Vererbung:
class Animal { constructor(name) { this.name = name; } eat() { return `${this.name} is eating`; } } class Cat extends Animal { purr() { return `${this.name} says purrrr`; } } const felix = new Cat("Felix");
Nachdem ich jahrelang mit PHP und JavaScript gearbeitet habe, sind hier einige Tipps, die ich gelernt habe:
Das Verständnis der prototypischen Vererbung mag sich zunächst seltsam anfühlen, insbesondere wenn Sie mit PHP oder Java arbeiten. Aber sobald es Klick macht, werden Sie seine Flexibilität und Leistung zu schätzen wissen. Es ist eine dieser JavaScript-Funktionen, die Sie dazu bringt, anders über objektorientierte Programmierung zu denken.
Sind Sie bei der JavaScript-Vererbung auf interessante Herausforderungen gestoßen? Schreiben Sie unten einen Kommentar – ich würde gerne Ihre Geschichten hören!
Das obige ist der detaillierte Inhalt vonGrundlegendes zur prototypischen Vererbung von JavaScript – Ein Leitfaden für Entwickler. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!