ការបន្តថ្នាក់ (inheritance) គឺ​ជា​ការបង្កើត​ថ្នាក់​មួយ​បន្ត​ភ្ជាប់​ទៅ​នឹង​ថ្នាក់​ផ្សេង​ៗ​ទៀត​។ ដើម្បី​បង្កើត​ថ្នាក់​មួយ​បន្ត​ភ្ជាប់​ទៅ​នឹង​ថ្នាក់​ផ្សេង​ៗ​ទៀត យើង​ត្រូវ​ធ្វើ​ដូច​ខាង​ក្រោម​នេះ​៖

 

//ការបង្កើត​ថ្នាក់​ឈ្មោះ ThreeD
function ThreeD(){
  this.pi = 3.14;
}
 
ThreeD.prototype.getObjectVolume = function(){
  console.log('មាឌ');
}
 
//ការបង្កើត​ថ្នាក់​មួយ​ទៀត​ឈ្មោះ Cube
function Cube(width, height, depth){
  this.width = width;
  this.height =  height;
  this.depth = depth;
}
 
//ការយក​ថ្នាក់​​ Cube ទៅ​បន្ត​ភ្ជាប់​នឹង​​ថ្នាក់ ThreeD
Cube.prototype = new ThreeD();
 
Cube.prototype.getCubeVolume = function(){
  this.volume = this.width * this.height * this.depth;
  console.log('មាឌ​របស់​គីប​គឺ​៖ '+this.volume);
} 

 

នៅ​លើ​បន្ទាត់​លេខ 18 ការសរសរ​ថា Cube.prototype = new ThreeD() គឺ​ជា​បញ្ជា​តម្រូវឲ្យ​យក​ថ្នាក់​ឈ្មោះ Cube មក​បន្ត​ភ្ជាប់​ទៅ​នឹង​ថ្នាក់​ឈ្មោះ ThreeD ។ ក្នុង​ករណី​នេះ ថ្នាក់​ឈ្មោះ ThreeD ត្រូវ​ហៅ​ថា ថ្នាក់មេ (superclass) ចំណែក​ឯ​ថ្នាក់​ឈ្មោះ Cube ត្រូវ​ហៅ​ថា ថ្នាក់រង (subclass) ។

 

 

ផលប្រយោជន៍​នៃ​ការបន្ត​ថ្នាក់​គឺ​ថា តាមរយៈ​សិស្ស​នៃ​ថ្នាក់រង យើង​អាច​យក​សម្បត្តិទាំងអស់ ដែល​មាន​នៅ​ក្នុង​ថ្នាក់​រង​និង​ថ្នាក់​មេ មក​ប្រើប្រាស់​បាន​តាម​សេចក្តី​ត្រូវការ​។ ពិនិត្យ​កម្មវិធី​ខាង​ក្រោម​នេះ​៖

 

//ការបង្កើត​ថ្នាក់​ឈ្មោះ ThreeD
function ThreeD(){
  this.pi = 3.14;
}
 
ThreeD.prototype.getObjectVolume = function(){
  console.log('មាឌ');
}
 
//ការបង្កើត​ថ្នាក់​មួយ​ទៀត​ឈ្មោះ Cube
function Cube(width, height, depth){
  this.width = width;
  this.height =  height;
  this.depth = depth;
}
 
//ការយក​ថ្នាក់​​ Cube ទៅ​បន្ត​ភ្ជាប់​នឹង​​ថ្នាក់ ThreeD
Cube.prototype = new ThreeD();
 
Cube.prototype.getCubeVolume = function(){
  this.volume = this.width * this.height * this.depth;
  console.log('មាឌ​របស់​គីប​គឺ​៖ '+this.volume);
} 
 
var cubeInstance = new Cube(25, 10, 5);
 
//ការយក​ទិន្នន័យ​ថ្នាក់​មេមកប្រើ
console.log('តម្លៃ​លេខ​របស់ ​pi៖ '+cubeInstance.pi);
 
cubeInstance.getCubeVolume();
 
//ការយក​វិធី​ក្នុង​ថ្នាក់មេ​មក​ប្រើ
cubeInstance.getObjectVolume();

 

នៅ​លើ​បន្ទាត់​លេខ 28 ការសរសេរ​ថា cubeInstance.pi គឺ​ជា​បញ្ជា​តម្រូវ​ឲ្យ​យក​សម្បត្តិ​ឈ្មោះ pi មក​ប្រើការ​។ យោង​ទៅ​តាម​ក្បួនច្បាប់​នៅ​ក្នុង​ភាសា JavaScript ការស្វែង​រក​​សម្បត្តិ​ឈ្មោះ pi នេះ​ គឺ​ត្រូវ​ធ្វើ​ឡើង​នៅ​ក្នុង​សិស្ស​ឈ្មោះ cubeInstance នោះ​មុន​សិន រួច​បាន​ឡើង​ទៅ​ថ្នាក់​របស់​វា រួច​បាន​ឡើង​ទៅ​ថ្នាក់​មេ​របស់​វា​ជា​ក្រោយ​។ សម្បត្តិ​ឈ្មោះ pi ត្រូវ​បាន​រក​ឃើញ​នៅ​ក្នុង​ថ្នាក់​មេ​ឈ្មោះ ThreeD ព្រោះ​វា​ត្រូវ​បាន​បង្កើត​ឡើ​ងនៅ​ទី​នោះ​។

 

នៅ​លើ​​បន្ទាត់​លេខ 30 ការសរសេរ​ថា cubeInstance.getCubeVolume() គឺ​ជា​បញ្ជា​តម្រូវ​ឲ្យ​យក​វិធី​ឈ្មោះ getCubeVolume មក​ប្រើ​តាម​រយៈ​សិស្ស​ឈ្មោះ cubeInstance ​ដែល​ជា​សិស្ស​​នៃ​ថ្នាក់រង​ឈ្មោះ Cube ។ ការស្វែង​រក​វិធី​នោះ​គឺ​ត្រូវ​ធ្វើ​ឡើង​នៅ​ក្នុង​សិស្ស​នោះ​សិន រួច​បាន​ឡើង​ទៅ​ថ្នាក់​របស់​វា​ រួច​បាន​ឡើង​ទៅ​ថ្នាក់​មេ​របស់​វា​​។ វិធី​ឈ្មោះ getCubeVolume ត្រូវ​បាន​រក​ឃើញ​នៅ​ក្នុង​ថ្នាក់រង​ឈ្មោះ Cube ។

 

នៅ​លើ​បន្ទាត់​លេខ 33 ការសរសេរ​ថា cubeInstance.getObjectVolume() គឺ​ជា​បញ្ជា​តម្រូវ​ឲ្យ​យក​វិធី​ឈ្មោះ getObjectVolume មក​ប្រើ​តាមរយៈ​សិស្ស​ឈ្មោះ cubeInstance ដែល​ជា​សិស្ស​នៃ​ថ្នាក់​រង​ឈ្មោះ Cube ។ ការស្វែង​រក​វិធី​នោះ​គឺ​ត្រូវ​ធ្វើ​ឡើង​នៅ​ក្នុង​សិស្ស​នោះ​សិន រួច​បាន​ឡើង​ទៅ​ថ្នាក់​របស់​វា​ រួច​បាន​ឡើង​ទៅ​ថ្នាក់​មេ​របស់​វា​​។ វិធី​ឈ្មោះ getObjectVolume ត្រូវ​បាន​រក​ឃើញ​នៅ​ក្នុង​ថ្នាក់​មេ​ឈ្មោះ ThreeD ។

 

សរុបមក​ នៅ​ពេល​ដែល​សម្បត្តិ​ណា​មួយ​ ត្រូវ​បាន​យក​មក​ប្រើ​តាមរយៈ​សិស្ស​ណា​មួយ ការស្វែង​រក​វត្ថុ​​និង​ឬ​អថេរ​នោះ​ត្រូវ​ធ្វើ​ឡើង​នៅ​ក្នុង​សិស្ស​នោះ​មុន រួច​បាន​ឡើង​ទៅ​ថ្នាក់​របស់​សិស្ស​នោះ រួច​បាន​ទៅ​ថ្នាក់​មេ​របស់​​នោះ បើ​សិន​ជា​មាន​។

 

 

នៅ​ក្នុង​ការបន្តថ្នាក់ យើង​អាច​យក​ថ្នាក់​​មក​បន្ត​គ្មា មាន​ចំនួន​ប៉ុ​ន្មាន​ក៏​បាន​ដែរ​។ ពោល​គឺ​យើង​អាច​បង្កើត​ថ្នាក់​មួយ​ដោយ​បន្ត​ភ្ជាប់​ទៅ​​នឹង​មួយ​ទៀត ដែល​ត្រូវ​បាន​បន្ត​ភ្ជាប់​ទៅ​នឹង​ថ្នាក់​មួយ​ទៀត ដែល​ត្រូវ​បាន​បន្ត​ភ្ជាប់​ទៅ​នឹង​ថ្នាក់​មួយ​ទៀត​…

 

ពិនិត្យ​កម្មវិធី​ខាង​ក្រោម​នេះ​៖

 

//ការបង្កើត​ថ្នាក់​ឈ្មោះ ThreeD
function ThreeD(){
  this.pi = 3.14;
}
 
ThreeD.prototype.getObjectVolume = function(){
  console.log('មាឌ');
}
 
//ការបង្កើត​ថ្នាក់​មួយ​ទៀត​ឈ្មោះ Cube
function Cube(width, height, depth){
  this.width = width || 0;
  this.height =  height || 0;
  this.depth = depth || 0;
}
 
//ការយក​ថ្នាក់​​ Cube ទៅ​បន្ត​ភ្ជាប់​នឹង​​ថ្នាក់ ThreeD
Cube.prototype = new ThreeD();
 
Cube.prototype.getCubeVolume = function(){
  this.volume = this.width * this.height * this.depth;
  console.log('មាឌ​របស់​គីប​គឺ​៖ '+this.volume);
} 
 
function Box(width, height, depth){
  this.width = width || 0;
  this.height =  height || 0;
  this.depth = depth || 0;
}
 
//ការយក​ថ្នាក់​​ Box ទៅ​បន្ត​ភ្ជាប់​នឹង​​ថ្នាក់ Cube
Box.prototype = new Cube();
 
Box.prototype. getBoxVolume = function(){
  this.volume = this.width * this.height * this.depth;
  console.log('មាឌ​របស់​ប្រអប់​​គឺ​៖ '+this.volume);
}

 

នៅ​លើ​បន្ទាត់​លេខ 18 ការសរសរ​ថា Cube.prototype = new ThreeD(); គឺ​ជា​បញ្ជា​តម្រូវ​ឲ្យ​យក​ថ្នាក់​ឈ្មោះ Cube មក​បន្ត​ភ្ជាប់​​ទៅ​នឹង​ថ្នាក់​ឈ្មោះ ThreeD ។

 

នៅ​លើ​បន្ទាត់​លេខ 32 ការសរសេរ​ថា Box.prototype = new Cube(); គឺ​ជា​បញ្ជា​តម្រូវ​ឲ្យ​យក​ថ្នាក់​ឈ្មោះ Box មក​បន្ត​ភ្ជាប់​ទៅ​នឹង​ថ្នាក់​ឈ្មោះ Cube ដែល​ត្រូវបាន​បន្ត​ភ្ជាប់​ទៅ​នឹង​ថ្នាក់​ឈ្មោះ ThreeD ។

 

 

ក្នុង​ករណី​មាន​ថ្នាក់​​ជា​ច្រើន​តភ្ជាប់​គ្នា​ពី​មួយ​ទៅ​មួយ នៅ​ពេល​ដែល​សម្បត្តិ​ណា​មួយ​ត្រូវ​បាន​យក​មក​ប្រើ​តាម​រយៈ​សិស្ស​នៃ​ថ្នាក់​ណា​មួយ ការស្វែង​រក​សម្បត្តិ​នោះ​ ត្រូវ​ធ្វើ​ឡើង​ជា​ដំបូង​នៅ​ក្នុង​សិស្ស​នោះ​ជា​មុន​សិន រួច​បាន​ឡើង​ទៅ​ថ្នាក់​​របស់​សិស្ស​នោះ រួច​បាន​ឡើង​ទៅ​ថ្នាក់​មេ​របស់​​សិស្ស​នោះ​​​ជា​បន្តបន្ទាប់​រហូត​សម្បត្តិ​ត្រូវ​បាន​រក​ឃើញ​។ ពិនិត្យ​កម្មវិធី​ខាង​ក្រោម​នេះ​៖

 

//ការបង្កើត​ថ្នាក់​ឈ្មោះ ThreeD
function ThreeD(){
  this.pi = 3.14;
}
 
ThreeD.prototype.getObjectVolume = function(){
  console.log('មាឌ');
}
 
//ការបង្កើត​ថ្នាក់​មួយ​ទៀត​ឈ្មោះ Cube
function Cube(width, height, depth){
  this.width = width || 0;
  this.height =  height || 0;
  this.depth = depth || 0;
}
 
//ការយក​ថ្នាក់​​ Cube ទៅ​បន្ត​ភ្ជាប់​នឹង​​ថ្នាក់ ThreeD
Cube.prototype = new ThreeD();
 
Cube.prototype.getCubeVolume = function(){
  this.volume = this.width * this.height * this.depth;
  console.log('មាឌ​របស់​គីប​គឺ​៖ '+this.volume);
} 
 
function Box(width, height, depth){
  this.width = width || 0;
  this.height =  height || 0;
  this.depth = depth || 0;
}
 
//ការយក​ថ្នាក់​​ Box ទៅ​បន្ត​ភ្ជាប់​នឹង​​ថ្នាក់ Cube
Box.prototype = new Cube();
 
Box.prototype. getBoxVolume = function(){
  this.volume = this.width * this.height * this.depth;
  console.log('មាឌ​របស់​ប្រអប់​​គឺ​៖ '+this.volume);
}
 
var boxInstance = new Box(25, 10, 5);
boxInstance.getBoxVolume();
boxInstance.getCubeVolume();
console.log('pi គឺ​ជា​លេខ​៖ '+boxInstance.pi);

 

នៅ​លើ​បន្ទាត់​លេខ 40 ការសរសេរ​ថា boxInstance.getBoxVolume() គឺ​ជា​បញ្ជា​តម្រូវ​ឲ្យ​យក​វិធី​ឈ្មោះ getBoxVolume មក​ប្រើ​តាម​រយៈ​សិស្ស​ឈ្មោះ boxInstance ដែល​ជា​សិស្ស​នៃ​ថ្នាក់​ឈ្មោះ​ Box ។ យោង​ទៅ​តាម​ក្បួន​ច្បាប់​នៅ​ក្នុង​ភាសា JavaScript ការស្វែង​រក​វិធី​នេះ គឺ​ត្រូវ​ធ្វើ​ឡើង​ជា​ដំបូង​នៅ​ក្នុង​សិស្ស​នោះ​ជា​មុន​សិន រួច​បាន​ឡើង​ទៅ​ថ្នាក់​របស់​វា​ជា​ក្រោយ រួច​បាន​ឡើង​ទៅ​ថ្នាក់​មេ​របស់​វា​ជា​បន្ត​ទៅ​​ទៀត​។ វិធី​ឈ្មោះ getBoxVolume ត្រូវ​បាន​រក​ឃើញ​នៅ​ក្នុង​ថ្នាក់​ឈ្មោះ Box ព្រោះ​វា​ត្រូវ​បាន​បង្កើត​ឡើង​នៅ​ទី​នោះ​​។

 

នៅ​លើ​បន្ទាត់​លេខ 42 ការសរសេរ​ថា boxInstance.pi គឺ​ជា​បញ្ជា​តម្រូវ​ឲ្យ​យក​ទិន្នន័យ​​ឈ្មោះ pi មក​ប្រើ​តាម​រយៈ​សិស្ស​ឈ្មោះ boxInstance ដែល​ជា​សិស្ស​នៃ​ថ្នាក់​ឈ្មោះ​ Box ។ យោង​ទៅ​តាម​ក្បួន​ច្បាប់​នៅ​ក្នុង​ភាសា JavaScript ការស្វែង​រក​ទិន្នន័យ​នេះ គឺ​ត្រូវ​ធ្វើ​ឡើង​ជា​ដំបូង​នៅ​ក្នុង​សិស្ស​នោះ​ជា​មុន​សិន រួច​បាន​ឡើង​ទៅ​ថ្នាក់​របស់​វា​ជា​ក្រោយ រួច​បាន​ឡើង​ទៅ​ថ្នាក់​មេ​របស់​វា​ជា​បន្ត​ទៅ​​ទៀត​។ ទិន្នន័យ​​ឈ្មោះ pi ត្រូវ​បាន​រក​ឃើញ​នៅ​ក្នុង​ថ្នាក់​ឈ្មោះ ThreeD ព្រោះ​វាត្រូវ​បាន​បង្កើត​ឡើង​នៅ​ទី​នោះ​៕

 

 

 

ក៏ប៉ុន្តែ​ សំណួរ​បាន​ចោទ​ឡើង​ថា ហេតុដូចម្តេច​បាន​ជា​យើង​ចាំបាច់​ត្រូវ​បង្កើត​ទិន្ន័យ​និង​វិធី​ទាំងឡាយ​ទុក​នៅ​ក្នុង​វត្ថុ​​ឈ្មោះ prototype របស់​ថ្នាក់​និមួយ​ៗ?

 

ចំលើយ​គឺ​ថា នៅ​ក្នុង​ភាសា JS ក្នុង​ករណី​មាន​ការបន្ត​ថ្នាក់​ ការស្វែង​រក​វត្ថុ​និង​ឬ​អថេរ​ដែល​ជា​សម្បត្តិ​របស់​ថ្នាក់​ទាំងឡាយ ​ត្រូវ​ធ្វើ​ឡើង​នៅ​ក្នុងវត្ថុ​​ពិសេស​របស់​ថ្នាក់​ ដែល​មាន​ឈ្មោះ​ជា prototype នេះ​។ បាន​ន័យ​ថា ទិន្នន័យ​និង​ឬ​វិធី​ទាំងឡាយ​ដែល​ត្រូវ​បាន​យក​មកប្រើតាម​រយសិស្ស​នៃ​ថ្នាក់​ណាមួយ នឹង​​ត្រូវ​ស្វែង​នៅ​ក្នុង​វត្ថុ​ដែល​ជា​សិស្សនោះ​មុន​គេ រួច​បាន​ឡើង​ទៅ​​វត្ថុ ដែល​ជា prototype នៃ​​ថ្នាក់​រង រួច​បាន​ឡើង​ទៅ​វត្ថុ​ដែល​ជា​ prototype នៃ​ថ្នាក់មេរហូត​ដល់​អស់​ថ្នាក់ បើ​សិន​ជា​រក​មិន​ឃើញ​។ អាស្រ័យ​ហេតុ​នេះ​ហើយ បាន​ជា​យើង​ចាំបាច់​ត្រូវ​រក្សាទិន្នន័យ​និង​ឬ​វិធី​ទាំងឡាយ​ទុក​នៅ​ក្នុង​វត្ថុ​ដែល​ជា​ prototype របស់​ថ្នាក់​និមួយ​ៗ​៕