Aunque JavaScript no proporciona palabras clave hereditarias, aún podemos encontrar algunas buenas maneras de implementarlas.
1. Prototipo de herencia de la cadena:
La copia del código es la siguiente:
var base = function ()
{
this.level = 1;
this.name = "base";
this.ToString = function () {
regresar "base";
};
};
Base.constant = "constante";
var sub = function ()
{
};
Sub.prototype = new Base ();
Sub.prototype.name = "sub";
Ventajas: a juzgar por la instancia de la palabra clave, una instancia es tanto una instancia de la clase principal como una instancia de la clase infantil, que parece ser la herencia más pura.
Desventajas: las subclases son diferentes de las propiedades y métodos de la clase principal. Deben ejecutarse por separado después de declaraciones como sub.prototype = new Base (); y no se puede envolver en el sub constructor. Por ejemplo: sub.prototype.name = "sub"; No se puede lograr la herencia múltiple.
2. Construir herencia:
La copia del código es la siguiente:
var base = function ()
{
this.level = 1;
this.name = "base";
this.ToString = function () {
regresar "base";
};
};
Base.constant = "constante";
var sub = function ()
{
Base.call (esto);
this.name = "sub";
};
Ventajas: se pueden implementar la herencia múltiple, y los atributos exclusivos de las subclases se pueden establecer dentro del constructor.
Desventajas: Uso de instancia de encontrado que el objeto no es una instancia de la clase principal.
3. Herencia de instancia:
La copia del código es la siguiente:
var base = function ()
{
this.level = 1;
this.name = "base";
this.ToString = function () {
regresar "base";
};
};
Base.constant = "constante";
var sub = function ()
{
Var instancia = nueva base ();
instance.name = "sub";
instancia de retorno;
};
Ventajas: es un objeto de la clase principal, y el mismo efecto se puede obtener utilizando nuevos objetos de construcción y sin usar nuevos objetos de construcción.
Desventajas: el objeto generado es esencialmente una instancia de la clase principal, no un objeto de subclase; La herencia múltiple no es compatible.
4. Copia de herencia:
La copia del código es la siguiente:
var base = function ()
{
this.level = 1;
this.name = "base";
this.ToString = function () {
regresar "base";
};
};
Base.constant = "constante";
var sub = function ()
{
var base = nueva base ();
para (var i en la base)
Sub.prototype [i] = base [i];
Sub.prototype ["name"] = "sub";
};
Ventajas: admite múltiples herencias.
Desventajas: baja eficiencia; No se puede obtener métodos que no puedan ser enumerados por la clase principal.
Estas formas tienen sus propias características, y solo en términos del código que proporciono, satisfacen la siguiente tabla:
2012-1-10: Agregado, si no necesitamos herencia de clase, solo necesitamos herencia de objetos. Para los navegadores que admiten Ecmascript 5, también podemos usar el método Object.Create para implementarlo:
La copia del código es la siguiente:
var base = function ()
{
this.level = 1;
this.name = "base";
this.ToString = function () {
regresar "base";
};
};
Base.constant = "constante";
var sub = object.create (new Base ());
sub.name = "sub";