Maison > interface Web > js tutoriel > le corps du texte

3 méthodes d'implémentation de l'héritage dans les connaissances javascript_Basic

WBOY
Libérer: 2016-05-16 15:17:44
original
1116 Les gens l'ont consulté

Utilisez Object.create pour implémenter l'héritage de classe

Ce qui suit est un exemple tiré du site officiel

//Shape - superclass
function Shape() {
 this.x = 0;
 this.y = 0;
}

Shape.prototype.move = function(x, y) {
  this.x += x;
  this.y += y;
  console.info("Shape moved.");
};

// Rectangle - subclass
function Rectangle() {
 Shape.call(this); //call super constructor.
}

Rectangle.prototype = Object.create(Shape.prototype);

var rect = new Rectangle();

rect instanceof Rectangle //true.
rect instanceof Shape //true.

rect.move(1, 1); //Outputs, "Shape moved."

Copier après la connexion

À ce stade, le constructeur du prototype Rectangle pointe vers la classe parent. Si vous devez utiliser votre propre constructeur, vous pouvez le spécifier manuellement, comme suit

Rectangle.prototype.constructor = Rectangle;

Utilisez util.inherites fourni avec le package d'outils utilitaires

Grammaire

util.inherits(constructeur, superConstructeur)
Exemple

const util = require('util');
const EventEmitter = require('events');

function MyStream() {
  EventEmitter.call(this);
}

util.inherits(MyStream, EventEmitter);

MyStream.prototype.write = function(data) {
  this.emit('data', data);
}

var stream = new MyStream();

console.log(stream instanceof EventEmitter); // true
console.log(MyStream.super_ === EventEmitter); // true

stream.on('data', (data) => {
 console.log(`Received data: "${data}"`);
})
stream.write('It works!'); // Received data: "It works!"

Copier après la connexion

C'est aussi un exemple très simple. En fait, le code source utilise les nouvelles fonctionnalités d'ES6. Jetons un coup d'œil

.
exports.inherits = function(ctor, superCtor) {

 if (ctor === undefined || ctor === null)
  throw new TypeError('The constructor to "inherits" must not be ' +
            'null or undefined');

 if (superCtor === undefined || superCtor === null)
  throw new TypeError('The super constructor to "inherits" must not ' +
            'be null or undefined');

 if (superCtor.prototype === undefined)
  throw new TypeError('The super constructor to "inherits" must ' +
            'have a prototype');

 ctor.super_ = superCtor;
 Object.setPrototypeOf(ctor.prototype, superCtor.prototype);
};

Copier après la connexion

Parmi eux, Object.setPrototypeOf est une nouvelle fonctionnalité d'ES6, qui définit le prototype d'un objet spécifié sur un autre objet ou null

Grammaire

Object.setPrototypeOf(obj, prototype)
obj est un objet qui sera prototypé
prototype est le nouveau prototype d'obj (peut être un objet ou nul).

Si défini sur null, c'est l'exemple suivant

Object.setPrototypeOf({}, null);
Je pense que setPrototypeOf porte bien son nom, spécialisé dans les prototypes pour le plaisir.
Alors, comment cette chose est-elle mise en œuvre ? À ce stade, vous devez utiliser le maître __proto__

Object.setPrototypeOf = Object.setPrototypeOf || function (obj, proto) {
 obj.__proto__ = proto;
 return obj; 
}
Copier après la connexion

Attribuez simplement un proto à obj.__proto__.

Utilisez le mot-clé extends

Les étudiants qui connaissent Java devraient être très familiers avec ce mot-clé. L'héritage en Java est réalisé par celui-ci.
Le mot-clé de classe nouvellement ajouté dans ES6 est le sucre syntaxique, mais son essence est toujours une fonction.

Dans l'exemple suivant, une classe nommée Polygon est définie, puis une classe Square qui hérite de Polygon est définie. Notez que super() utilisé dans le constructeur, supper() ne peut être utilisé que dans le constructeur et la super fonction doit être appelée avant de pouvoir être utilisée.

class Polygon {
 constructor(height, width) {
  this.name = 'Polygon';
  this.height = height;
  this.width = width;
 }
}

class Square extends Polygon {
 constructor(length) {
  super(length, length);
  this.name = 'Square';
 }
}

Copier après la connexion

Après avoir utilisé des mots-clés, vous n'avez pas besoin de configurer divers prototypes. Les mots-clés ont été encapsulés, ce qui est très rapide et pratique.

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal