JavaScriptの継承とJavaScriptの継承は、各クラスを使用します。 prototype.superclass = c.superclass = p.prototype;
var c = new c()の場合、c .__ proto__ = C.prototype;
Cが「メンバー変数」にアクセスすると、__Proto__が取得できない場合、それが存在しない場合、それは親の親にあります。その他は定義中に割り当てられます(各オブジェクトは共有されます)。修正は、クラス設計の元の意図に違反するすべてのオブジェクトインスタンスによって共有されます。
例えば:
次のようにコードコードをコピーします。
'package'.j(function(){
'class a'.j(function(){
jpublic({{{{{{{
V:{a:1}
});
jprivate({{
p:{a:1}
});
jprotect({{
x:{a:1}
});
});
'クラスBはa'.j(function()を拡張します{
});
});
var b1 = new b();
b1.va = 5;
b1.xa = 5;
var b2 = new b();
console.log(b1.va)//出力5
console.log(b1.xa)//出力5
console.log(b2.va)//出力も5、予想されない1
console.log(b2.xa)//出力1
console.log(b2.pa)// unsable、それは存在せずにpを促します
この問題を解決する方法は?
A.「メンバー変数」(それ自体がオブジェクトです)は、元のチェーンで定義されていませんが、この時点でオブジェクトインスタンスを作成するときに、オブジェクトに割り当てられます。 __Proto__。
JS ++は、JPRivateで定義されている「メンバー変数」または「メンバー関数」が外側の__Proto__に割り当てられ、このインスタンスのみが__Proto__に割り当てられる限り、同様の方法を提供します。
B.「メンバー変数」は、プロトタイプチェーンでのみ読み取られるだけです(それ自体がオブジェクトです)
c.jpublicによって定義された「メンバー変数」(それ自体)のメンバー(それ自体はオブジェクトです)、読み取り専門メンバー、割り当てられないことを忘れないでください。そうしないと、さまざまな場合に共有されます。