Hay una gran diferencia entre la herencia de JavaScript y la herencia OOP estándar. Prototype.superClass = C.SuperClass = P.Prototype;
Cuando var c = new c (), c .__ proto__ = c.prototype;
Cuando C visite "Variables miembros", si no se puede obtener __proto__, irá a C.Prototype para encontrarlo. y otros se asignan durante la definición (cada objeto se comparte). Modificado será compartido por todas las instancias de objetos, que viola la intención original del diseño de clase.
Por ejemplo:
Copiar código del código de la siguiente manera:
'paquete'.j (function () {
'Class a'.j (function () {
JPublic ({{{{
V: {A: 1}
});
jPrivate ({{
P: {A: 1}
});
JProtect ({{
x: {a: 1}
});
});
'La clase B extiende a'.j (function () {
});
});
var b1 = nuevo b ();
B1.VA = 5;
b1.xa = 5;
var b2 = new B ();
console.log (b1.va) // Salida como 5
console.log (b1.xa) // Salida como 5
Console.log (b2.va) // la salida también es 5, no se espera 1
console.log (b2.xa) // salida como 1
console.log (B2.PA) // Unsable, provocará P sin existencia
¿Cómo resolver este problema?
A. La "variable miembro" (en sí misma es un objeto en sí mismo) como V no se define en la cadena original, pero se llama en el constructor. __proto__.
JS ++ proporciona un método similar, siempre que la "variable miembro" o "función miembro" definida en JPrivate se asigne en el __proto__ externo, y solo esta instancia está disponible) también se asignará al __proto__
B. La "variable de miembro" solo lee solo se lee en la cadena prototipo (es un objeto en sí mismo)
Los miembros de las "variables de miembros" (en sí mismos son objetos) definidos por C.JPublic, solo leen solo a los miembros, recuerden que no se asignen, de lo contrario se compartirá en varios casos.