Нет, если вы не сделаете все переменные «общедоступными», то есть сделаете их членами Function
либо напрямую, либо через свойство prototype
.
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( ) ;
Вы заметите несколько изменений.
Наиболее важно, что вызов предполагаемого конструктора "суперклассов" теперь неявно присутствует в этой строке:
<name>.prototype = new C ;
И A
, и B
теперь будут иметь индивидуально изменяемых членов x
и y
, что было бы не так, если бы мы написали ... = C
.
Тогда x
, y
и modify
все являются "публичными" членами, так что им присваивается другой Function
<name>.prototype.modify = function( ) { /* ... */ }
"переопределит" оригинал Function
с этим именем.
Наконец, вызов modify
не может быть выполнен в объявлении Function
, потому что неявный вызов "суперкласса" будет выполнен снова, когда мы установим для предполагаемого "суперкласса" prototype
свойство предполагаемых «подклассов».
Но это более или менее так, как вы бы поступали в JavaScript.
НТН,
FK