Nicht, wenn Sie nicht alle Variablen "öffentlich" machen, dh sie Function
entweder direkt oder über die prototype
Eigenschaft 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 A
und B
werden nun individuell veränderbare Mitglieder haben x
und y
was nicht der Fall wäre, wenn wir ... = C
stattdessen geschrieben hätten .
Dann x
, y
und modify
alle „öffentlichen“ Mitglieder , so dass eine andere Zuordnung von Function
ihnen
<name>.prototype.modify = function( ) { /* ... */ }
überschreibt das Original Function
mit diesem Namen.
Schließlich kann der Aufruf von modify
in der Function
Deklaration nicht ausgeführt werden, da der implizite Aufruf der "Superklasse" dann erneut ausgeführt wird, wenn wir die vermeintliche "Oberklasse" auf die prototype
Eigenschaft der angeblichen "Unterklassen" setzen.
Aber so würden Sie mehr oder weniger so etwas in JavaScript machen.
HTH,
FK
modify
ist keine Methode, sondern eine verschachtelte Funktion - es gibt einen Unterschied zwischen diesen beiden ...