Embora o JavaScript não forneça palavras -chave herdadas, ainda podemos criar algumas boas maneiras de implementá -las.
1. Herança da cadeia de protótipos:
A cópia do código é a seguinte:
var base = function ()
{
this.level = 1;
this.name = "base";
this.toString = function () {
retornar "base";
};
};
Base.constant = "constante";
var sub = function ()
{
};
Sub.prototype = new Base ();
Sub.prototype.name = "sub";
Vantagens: a julgar pela instância da palavra -chave, uma instância é uma instância da classe pai e uma instância da classe infantil, que parece ser a herança mais pura.
Desvantagens: as subclasses são diferentes das propriedades e métodos da classe pai. Eles devem ser executados separadamente após declarações como sub.prototype = new base (); e não pode ser envolvido no sub -construtor. Por exemplo: sub.prototype.name = "sub"; A herança múltipla não pode ser alcançada.
2. Construa herança:
A cópia do código é a seguinte:
var base = function ()
{
this.level = 1;
this.name = "base";
this.toString = function () {
retornar "base";
};
};
Base.constant = "constante";
var sub = function ()
{
Base.call (this);
this.name = "sub";
};
Vantagens: a herança múltipla pode ser implementada e atributos exclusivos das subclasses podem ser definidos dentro do construtor.
Desvantagens: Usando a Instância, descobriu que o objeto não é uma instância da classe pai.
3. Herança de instância:
A cópia do código é a seguinte:
var base = function ()
{
this.level = 1;
this.name = "base";
this.toString = function () {
retornar "base";
};
};
Base.constant = "constante";
var sub = function ()
{
var instância = new base ();
instance.name = "sub";
instância de retorno;
};
Vantagens: é um objeto da classe pai e o mesmo efeito pode ser obtido usando novos para construir objetos e sem usar novos para construir objetos.
Desvantagens: o objeto gerado é essencialmente uma instância da classe pai, não um objeto de subclasse; A herança múltipla não é suportada.
4. Herança de cópia:
A cópia do código é a seguinte:
var base = function ()
{
this.level = 1;
this.name = "base";
this.toString = function () {
retornar "base";
};
};
Base.constant = "constante";
var sub = function ()
{
var base = new base ();
para (var i na base)
Sub.prototype [i] = base [i];
Sub.prototype ["nome"] = "sub";
};
Vantagens: suporta herança múltipla.
Desvantagens: baixa eficiência; Não é possível obter métodos que não podem ser enumerados pela classe pai.
Esses formulários têm suas próprias características, e somente em termos do código que eu forneço, eles satisfazem a tabela a seguir:
2012-1-10: adicionado, se não precisarmos de herança de classe, precisamos apenas de herança de objetos. Para os navegadores que suportam o ECMAScript 5, também podemos usar o método Object.Create para implementá -lo:
A cópia do código é a seguinte:
var base = function ()
{
this.level = 1;
this.name = "base";
this.toString = function () {
retornar "base";
};
};
Base.constant = "constante";
var sub = object.create (new base ());
sub.name = "sub";