Nicht, wenn Sie nicht alle Variablen "öffentlich" machen, dh sie Functionentweder direkt oder über die prototypeEigenschaft zu Mitgliedern der machen .
var C = function( ) {
this.x = 10 , this.y = 20 ;
this.modify = function( ) {
this.x = 30 , this.y = 40 ;
console.log("(!) C >> " + (this.x + this.y) ) ;
} ;
} ;
var A = function( ) {
this.modify = function( ) {
this.x = 300 , this.y = 400 ;
console.log("(!) A >> " + (this.x + this.y) ) ;
} ;
} ;
A.prototype = new C ;
var B = function( ) {
this.modify = function( ) {
this.x = 3000 , this.y = 4000 ;
console.log("(!) B >> " + (this.x + this.y) ) ;
} ;
} ;
new C( ).modify( ) ;
new A( ).modify( ) ;
new B( ).modify( ) ;
Sie werden einige Änderungen bemerken.
Am wichtigsten ist, dass der Aufruf des vermeintlichen Konstruktors "Superklassen" jetzt in dieser Zeile impliziert ist:
<name>.prototype = new C ;
Beide Aund Bwerden nun individuell veränderbare Mitglieder haben xund ywas nicht der Fall wäre, wenn wir ... = Cstattdessen geschrieben hätten .
Dann x, yund modifyalle „öffentlichen“ Mitglieder , so dass eine andere Zuordnung von Functionihnen
<name>.prototype.modify = function( ) { /* ... */ }
überschreibt das Original Functionmit diesem Namen.
Schließlich kann der Aufruf von modifyin der FunctionDeklaration nicht ausgeführt werden, da der implizite Aufruf der "Superklasse" dann erneut ausgeführt wird, wenn wir die vermeintliche "Oberklasse" auf die prototypeEigenschaft der angeblichen "Unterklassen" setzen.
Aber so würden Sie mehr oder weniger so etwas in JavaScript machen.
HTH,
FK
modifyist keine Methode, sondern eine verschachtelte Funktion - es gibt einen Unterschied zwischen diesen beiden ...