Há uma grande diferença entre a herança do JavaScript e a herança de OOP padrão. prototype.superclass = c.superclass = p.prototype;
Quando var c = novo c (), c .__ proto__ = c.prototype;
Quando o C visita "Variáveis de membro", se __proto__ não puder ser obtido, você irá para C.Prototype para encontrá -lo. e outros são alocados durante a definição (cada objeto é compartilhado). Modificado será compartilhado por todas as instâncias de objetos, que violam a intenção original do design de classe.
Por exemplo:
Copie o código do código da seguinte forma:
'package'.j (function () {
'Classe A'.j (function () {
jpublic ({{{{{
V: {a: 1}
});
jPrivate ({{
P: {a: 1}
});
jProtect ({{
x: {a: 1}
});
});
'Classe B estende A'.j (function () {
});
});
var b1 = novo b ();
b1.va = 5;
B1.xa = 5;
var b2 = novo b ();
console.log (b1.va) // saída como 5
console.log (b1.xa) // saída como 5
Console.log (b2.va) // a saída também é 5, não esperada 1
console.log (b2.xa) // saída como 1
console.log (B2.PA) // Unsable, ele levará P sem existência
Como resolver esse problema?
A. A "variável de membro" (por si só é um objeto em si), como V, não é definido na cadeia original, mas é chamado no construtor. __proto__.
O JS ++ fornece um método semelhante, desde que a "variável de membro" ou a "função do membro" definida no JPrivate seja alocada no __proto__ externo, e apenas esta instância está disponível.
B. A "variável de membro" lida apenas lida apenas na cadeia de protótipos (é um objeto em si)
Os membros das "variáveis de membros" (por si só são objetos) definidos por C.Jpublic, apenas leia apenas membros, lembre -se de não ser atribuído, caso contrário, serão compartilhados em vários casos.