Maison  >  Article  >  Comment implémenter l'héritage dans Es5

Comment implémenter l'héritage dans Es5

DDD
DDDoriginal
2024-08-13 16:48:20719parcourir

Cet article traite des approches d'héritage dans ES5, en se concentrant sur trois méthodes principales : l'héritage basé sur des prototypes, l'héritage de constructeur et l'héritage parasite. L'article explique les avantages et les inconvénients de chaque approche, en fournissant du code ex. en ES5. Cela implique de créer une classe de base (parente), puis de la « sous-classer » en créant de nouveaux objets qui héritent des propriétés et des méthodes de la classe de base. Cela se fait en manipulant la propriété __proto__ des objets de la sous-classe.

<code class="javascript">const Animal = {
  eat() {
    console.log("Eating...");
  }
};

const Dog = {
  __proto__: Animal,
  bark() {
    console.log("Woof!");
  }
};

const myDog = Object.create(Dog);
myDog.eat(); // logs "Eating..."
myDog.bark(); // logs "Woof!"</code>
Héritage du constructeur

Comment implémenter l'héritage dans Es5Cette approche implique la création d'une fonction constructeur de classe de base, puis son extension en définissant une nouvelle fonction constructeur qui prend la base constructeur de classe comme argument et ajoute des propriétés et des méthodes supplémentaires.

<code class="javascript">function Animal() {
  this.eat = function() {
    console.log("Eating...");
  }
}

function Dog(name) {
  Animal.call(this);
  this.name = name;
  this.bark = function() {
    console.log("Woof!");
  }
}

const myDog = new Dog("Luna");
myDog.eat(); // logs "Eating..."
myDog.bark(); // logs "Woof!"</code>

Héritage parasitaire

Cette approche implique la création d'un objet temporaire qui hérite de la classe de base, puis utilise cet objet pour créer la sous-classe souhaitée. C'est similaire à l'héritage basé sur un prototype, mais au lieu de modifier la propriété __proto__, il crée un nouvel objet qui agit comme un pont entre la classe de base et la sous-classe.

<code class="javascript">const Animal = {
  eat() {
    console.log("Eating...");
  }
};

const Dog = (function() {
  function AnimalProxy() {}
  AnimalProxy.prototype = Animal;
  const proxy = new AnimalProxy();
  proxy.bark = function() {
    console.log("Woof!");
  }
  return proxy;
})();

const myDog = Object.create(Dog);
myDog.eat(); // logs "Eating..."
myDog.bark(); // logs "Woof!"</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn