No, a meno che tu non renda tutte le variabili "pubbliche", cioè le rendi membri di Function
direttamente o tramite la prototype
proprietà.
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( ) ;
Noterai alcuni cambiamenti.
Ancora più importante, la chiamata al presunto costruttore di "superclassi" è ora implicita all'interno di questa riga:
<name>.prototype = new C ;
Entrambi A
e B
ora avranno membri modificabili individualmentex
e y
che non sarebbe il caso se avessimo ... = C
invece scritto .
Poi, x
, y
e modify
sono tutti i membri del "pubblico" in modo che l'assegnazione di un diverso Function
per loro
<name>.prototype.modify = function( ) { }
"sovrascriverà" l'originale Function
con quel nome.
Infine, la chiamata a modify
non può essere eseguita nella Function
dichiarazione perché la chiamata implicita alla "superclasse" verrebbe quindi eseguita di nuovo quando impostiamo la presunta "superclasse" sulla prototype
proprietà delle presunte "sottoclassi".
Ma beh, questo è più o meno come faresti questo genere di cose in JavaScript.
HTH,
FK
modify
non è un metodo ma una funzione annidata - c'è una differenza tra questi due ...