ไม่เว้นแต่คุณจะทำให้ตัวแปรทั้งหมดเป็น "สาธารณะ" นั่นคือทำให้ตัวแปรเหล่านี้เป็นสมาชิกของคุณสมบัติ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( ) ;
คุณจะสังเกตเห็นการเปลี่ยนแปลงเล็กน้อย
ที่สำคัญที่สุดคือการเรียกตัวสร้าง "super-class" ที่ควรจะเป็นโดยปริยายในบรรทัดนี้:
<name>.prototype = new C ;
ทั้งสองA
และB
ตอนนี้จะมีสมาชิกที่ปรับเปลี่ยนได้ทีละคนx
และy
จะไม่เป็นเช่นนั้นหากเราจะเขียน... = C
แทน
จากนั้นx
, y
และmodify
กำลังสมาชิกทุกคน "สาธารณะ" เพื่อให้การกำหนดที่แตกต่างกันFunction
กับพวกเขา
<name>.prototype.modify = function( ) { }
จะ "ลบล้าง" ต้นฉบับFunction
ด้วยชื่อนั้น
สุดท้ายการเรียกที่modify
ไม่สามารถทำได้ในการFunction
ประกาศเนื่องจากการเรียกโดยปริยายไปยัง "super-class" จะถูกดำเนินการอีกครั้งเมื่อเราตั้งค่า "super-class" ที่ควรเป็นprototype
คุณสมบัติของ "คลาสย่อย" ที่ควรจะเป็น
แต่นี่เป็นวิธีที่คุณจะทำสิ่งนี้ใน JavaScript ไม่มากก็น้อย
HTH,
FK
modify
ไม่ใช่วิธีการ แต่เป็นฟังก์ชันที่ซ้อนกัน - มีความแตกต่างระหว่างสองอย่างนี้ ...