Bien que JavaScript ne fournisse pas de mots clés héréditaires, nous pouvons toujours trouver de bonnes façons de les implémenter.
1. Héritage de la chaîne prototype:
La copie de code est la suivante:
var base = fonction ()
{
this.level = 1;
this.name = "base";
this.toString = function () {
retourner "base";
};
};
Base.Constant = "constante";
var sub = fonction ()
{
};
Sub.prototype = new base ();
Sub.prototype.name = "sub";
Avantages: à en juger par l'instance de mot clé, une instance est à la fois une instance de la classe parent et une instance de la classe enfant, qui semble être l'héritage le plus pur.
Inconvénients: les sous-classes sont différentes des propriétés et des méthodes de la classe parent. Ils doivent être exécutés séparément après des instructions telles que sub.prototype = new base (); et ne peut pas être enveloppé dans le sous-constructeur. Par exemple: sub.prototype.name = "sub"; L'héritage multiple ne peut pas être atteint.
2. Construire l'héritage:
La copie de code est la suivante:
var base = fonction ()
{
this.level = 1;
this.name = "base";
this.toString = function () {
retourner "base";
};
};
Base.Constant = "constante";
var sub = fonction ()
{
Base.Call (ceci);
this.name = "sub";
};
Avantages: l'héritage multiple peut être mis en œuvre et les attributs propres aux sous-classes peuvent être définis à l'intérieur du constructeur.
Inconvénients: l'utilisation d'instructions a révélé que l'objet n'est pas une instance de la classe parent.
3. Héritage d'instance:
La copie de code est la suivante:
var base = fonction ()
{
this.level = 1;
this.name = "base";
this.toString = function () {
retourner "base";
};
};
Base.Constant = "constante";
var sub = fonction ()
{
var instance = new base ();
instance.name = "sub";
retour d'instance;
};
Avantages: il s'agit d'un objet de la classe parent, et le même effet peut être obtenu en utilisant un nouveau pour construire des objets et sans utiliser de nouveau pour construire des objets.
Inconvénients: l'objet généré est essentiellement une instance de la classe parent, pas un objet de sous-classe; L'héritage multiple n'est pas pris en charge.
4. Copier l'héritage:
La copie de code est la suivante:
var base = fonction ()
{
this.level = 1;
this.name = "base";
this.toString = function () {
retourner "base";
};
};
Base.Constant = "constante";
var sub = fonction ()
{
var base = new base ();
pour (var i en base)
Sub.prototype [i] = base [i];
Sub.prototype ["name"] = "sub";
};
Avantages: prend en charge plusieurs héritage.
Inconvénients: faible efficacité; Impossible d'obtenir des méthodes qui ne peuvent pas être énumérées par la classe parent.
Ces formulaires ont leurs propres caractéristiques, et ce n'est qu'en termes de code que je fournis, ils satisfont le tableau suivant:
2012-1-10: Ajouté, si nous n'avons pas besoin de l'héritage des classes, nous n'avons besoin que d'héritage d'objet. Pour les navigateurs qui prennent en charge ECMascript 5, nous pouvons également utiliser la méthode objet.Create pour l'implémenter:
La copie de code est la suivante:
var base = fonction ()
{
this.level = 1;
this.name = "base";
this.toString = function () {
retourner "base";
};
};
Base.Constant = "constante";
var sub = object.create (new base ());
sub.name = "sub";