យើង​បាន​ដឹង​រួច​មក​ហើយ​ថា សិស្ស​គឺ​ជា​វត្ថុ​ដែល​ជា​លទ្ធផល​​បាន​មក​ពី​ការយក​ថ្នាក់មក​ប្រើ​ជា​មួយ​នឹង​ប្រមាណ​សញ្ញា new ។ ដូចនេះ​សិស្ស​ក៏​មាន​លក្ខណៈ​ដូច​ជា​​វត្ថុ​ដទៃ​ទៀត​ដែរ​​។ បាន​ន័យ​ថា នៅ​កន្លែង​ណា​ដែល​វត្ថុ​ផ្សេង​ៗទៀត​​ អាច​ត្រូវ​យក​ទៅ​ប្រើ សិស្ស​ក៏​អាច​ត្រូវ​យក​ទៅ​ប្រើ​បាន​ដូច​គ្នា​ដែរ​​។ មួយ​វិញ​ទៀត សិស្ស​គឺ​ជា​វត្ថុ​ទទេ​ស្អាត​មួយ ក្រោយ​ពី​​ត្រូវ​បាន​​បង្កើត​ឡើង​រួច​មក​។ ក៏ប៉ុន្តែ ​សិស្ស​មាន​ទំនាក់ទំនង​យ៉ាង​ជិតស្និទ្ធ​ ជាមួយ​នឹង​ថ្នាក់​របស់​វា ហើយ​គឺ​ដោយសារ​សិស្ស​នេះ​ហើយ ដែល​យើង​អាច​យក​វិធី​​និង​ទិន្នន័យ​​នៅ​ក្នុង​ថ្នាក់ ទៅ​ប្រើ​នៅ​ក្នុង​ដែនកំណត់​ដទៃ​ទៀតបាន​។

 

យើង​គួរ​តែ​រំលឹក​ឡើង​វិញ​ថា​ នៅ​ពេល​ដែល​យើង​យក​វិធី​​មក​ប្រើ​តាមរយៈ​សិស្ស​ណាមួយ សិស្ស​នោះ​នឹង​ត្រូវ​ផ្តល់​ជា​ដំណឹង​ ឲ្យ​ទៅ​​វិធី​នោះ​ជា​ស្វ័យប្រវត្តិ​។ នេះ​គឺ​ជា​ក្បួន​ច្បាប់​នៅ​ក្នុង​ភាសា JavaScript ។

 

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

 

function Area(){};
 
Area.prototype.pi = 3.14;
Area.prototype.rectangle = function(width, height){
  var surface = width * height;
  return surface;
}
 
var instance = new Area();
 
//បង្កើត​ទិន្នន័យ​ឈ្មោះ width ទុក​ក្នុង​សិស្ស​ឈ្មោះ instance
instance.width = 25;
 
//បង្កើត​ទិន្នន័យ​ឈ្មោះ height ទុក​ក្នុង​សិស្ស​ឈ្មោះ instance
instance.height = 5;
 
console.log('ប្រវែង​របស់​​ width ​គឺ​៖ '+instance.width);
console.log('ប្រវែង​របស់​​ height ​គឺ​៖ '+instance.height);

 

នៅ​លើ​បន្ទាត់លេខ 12 ការសរសរ​ថា instance.width = 25 គឺ​ជា​បញ្ជា​តម្រូវ​ឲ្យ​បង្កើត​ទិន្នន័យ​ឈ្មោះ width ​​មួយ ទុក​នៅ​ក្នុង​សិស្ស​ឈ្មោះ instance នៃ​ថ្នាក់​ឈ្មោះ Area ។

 

នៅ​លើ​បន្ទាត់លេខ 15 ការសរសរ​ថា instance.height = 5 គឺ​ជា​បញ្ជា​តម្រូវ​ឲ្យ​បង្កើត​ទិន្នន័យ​ឈ្មោះ height ​​មួយ ទុក​នៅ​ក្នុង​សិស្ស​ឈ្មោះ instance នៃ​ថ្នាក់​ឈ្មោះ Area ។

 

សរុប​មក​ យើង​ឃើញ​ថា​នៅក្នុង​សិស្ស​ឈ្មោះ instance មាន​វត្ថុ​ដែល​ជាទិន្នន័យ​ពីរ​ ត្រូវ​បាន​បង្កើត​​ទុក​នៅ​ទី​នោះ​។ ហើយ​ជាទូទៅ​ យើង​ហៅ​បណ្តា​ទិន្នន័យ​ដែល​មាន​នៅ​ក្នុង​សិស្ស​ទាំងនោះ​ថា​​ជា ទិន្នន័យសិស្ស (instance attribute) ដែល​អាច​ជា​វត្ថុ​​និង​ឬ​អថេរ​ប្រភេទ​ណា​ក៏​បាន​ដែរ​។

 

លើស​ពី​នេះ​ទៀត ការបង្កើត​ទិន្នន័យ​សិស្ស​អាច​ត្រូវ​ធ្វើ​ឡើង​តាម​របៀប​ម៉្យាង​ទៀត​ ដូច​ខាង​ក្រោម​នេះ​៖

 

function Area(){
  //ការបង្កើត​ទិន្នន័យ​ទុក​ក្នុង​សិស្ស
  this.width = 25;
  this.height = 5;
}
 
Area.prototype.pi = 3.14;
Area.prototype.rectangle = function(width, height){
  var surface = width * height;
  return surface;
}
 
var instance = new Area();
 
//ការយក​ទិន្នន័យ​សិស្ស​មក​ប្រើ
console.log('ប្រវែង​របស់​​ width ​គឺ​៖ '+instance.width);
console.log('ប្រវែង​របស់​ height ​គឺ​៖ '+instance.height);

 

នៅ​លើ​បន្ទាត់​លេខ 3 ការសរសេរ​ថា this.width = 25 គឺ​ជា​បញ្ជា​តម្រូវ​ឲ្យ​បង្កើត​ទិន្នន័យ​សិស្ស​មួយ​ មាន​ឈ្មោះ​ថា width ទុក​នៅ​ក្នុង​សិស្ស ដែល​នឹង​ត្រូវ​​បង្កើត​ឡើង នៅ​ពេល​ដែល​ថ្នាក់​ឈ្មោះ Area នឹង​ត្រូវ​យក​ទៅ​ប្រើ​ជាមួយ​នឹង​ប្រមាណ​សញ្ញា new ។

 

នៅ​លើ​បន្ទាត់​លេខ 4 ការសរសរ​ថា this.height = 5 គឺ​ជា​បញ្ជា​តម្រូវ​ឲ្យ​បង្កើត​ទិន្នន័យ​សិស្ស​មួយ​ទៀត​ មាន​ឈ្មោះ​ថា height ទុក​នៅ​ក្នុង​សិស្ស ដែល​នឹង​ត្រូវ​​បង្កើត​ឡើង នៅ​ពេល​ដែល​ថ្នាក់​ឈ្មោះ Area នឹង​ត្រូវ​យក​ទៅ​ប្រើ​ជាមួយ​នឹង​ប្រមាណ​សញ្ញា new ។

 

នៅ​លើ​បន្ទាត់​លេខ 13 ការសរសរ​ថា var instance = new Area() គឺ​ជា​បញ្ជា​តម្រូវ​ឲ្យ​បង្កើត​សិស្ស​​​មួយ​មាន​ឈ្មោះ​ថា instance ដែល​ជា​សិស្ស​នៃថ្នាក់​ឈ្មោះ Area ។ ដោយ​យោង​ទៅ​តាម​ក្បួនច្បាប់​នៅ​ក្នុង​ភាសា JavaScript ទិន្នន័យ​សិស្ស ដែល​ជា​អថេរ​​ឈ្មោះ width និង​ height ត្រូវ​បាន​បង្កើត​ឡើង​ និង​​ទុក​នៅ​ក្នុង​សិស្ស​ឈ្មោះ instance នោះ​។

 

ដូចនេះ​​យើង​ឃើញ​ថា ការយក​ថ្នាក់​មក​ប្រើ​ជា​មួយ​នឹង​ប្រមាណ​សញ្ញា new អាច​​ជា​បញ្ជា​ពីរ​​កើត​ឡើ​ង​ក្នុង​ពេល​តែមួយ​។ គឺ​ថា បញ្ជា​ទី​មួយ គឺ​ជា​ការបង្កើត​វត្ថុ​មួយ​ដែល​ជា​សិស្ស ចំណែកឯ​បញ្ជា​ទីពីរ​វិញ​ គឺ​ជា​ការបង្កើត​ទិន្នន័យ​ផ្សេង​ៗ​សម្រាប់​សិស្ស​នោះ​​​​។ មួយវិញទៀត ដោយ​យើង​អាច​បង្កើត​ទិន្នន័យ​សិស្ស​នៅ​ក្នុង​ក្បួន​​ដែល​ត្រូវ​​យក​មក​ប្រើប្រាស់​សម្រាប់​បង្កើតថ្នាក់​ផង​ដែរ​នោះ ដូចនេះក្បួន​នោះ​មាន​តួនាទី​សំខាន់​ណាស់​ នៅ​ក្នុង​ការបង្កើត​ថ្នាក់​ និង​នៅ​ក្នុង​ការបង្កើត​​ទិន្នន័យ​សិស្ស​។ ហើយ​ជាទូទៅ គេ​និយម​ហៅ​ក្បួ​ន​​​​​នោះ​ថា​ជា ស្ថាបនិក (constructor) ព្រោះ​មាន​នាទី​ជា​អ្នក​បង្កើត​ថ្នាក់​និង​​​​​ទិន្នន័យ​សិស្ស​។

 

នៅ​លើ​បន្ទាត់​លេខ 16 ការសរសេរ​ថា instance.width គឺ​ជា​បញ្ជា​តម្រូវ​ឲ្យ​​យក​ទិន្នន័យសិស្ស ដែល​ជា​អថេរ​មាន​ឈ្មោះថា width នៅ​ក្នុង​សិស្ស​ឈ្មោះ instance យក​​មក​ប្រើការ​។

 

នៅ​លើ​បន្ទាត់​លេខ 17 ការសរសេរ​ថា instance.height គឺ​ជា​បញ្ជា​តម្រូវ​ឲ្យ​​យក​ទិន្នន័យសិស្ស ដែល​ជា​អថេរ​​មាន​​ឈ្មោះថា height នៅ​ក្នុង​សិស្ស​ឈ្ម៉ោះ instance យក​​មក​ប្រើ​ការ។​

 

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

 

function Area(){
  //ការបង្កើត​ទិន្នន័យ​ទុក​ក្នុង​សិស្ស
  this.width = 25;
  this.height = 5;
}
 
Area.prototype.pi = 3.14;
Area.prototype.rectangle = function(width, height){
  var surface = width * height;
  return surface;
}
 
Area.prototype.setValue = function(){
 this.width = 30;
}
 
var instance = new Area();
 
//ការយក​វិធី​ setValue មកប្រើ​ដើម្បីកំណត់​​តំលៃ​ទិន្នន័យ​សិស្ស
instance.setValue();
 
console.log('ប្រវែង​ width ​ថ្មី​​គឺ​៖ '+instance.width);
 
//ការដូរ​តំលៃ​ទិន្នន័យ​សិស្ស​ដោយ​ផ្ទាល់
instance.height = 10;
 
console.log('ប្រវែង ​height ​​ថ្មី​គឺ​៖ '+instance.height);

 

នៅ​លើ​បន្ទាត់​លេខ 14 ការសរសរ​ថា this.width = 30 គឺ​ជា​បញ្ជា​តម្រូវ​ឲ្យ​​ប្តូរ​តម្លៃ​នៃ​ទិន្នន័យ​​សិស្ស ដែល​ជា​អថេរ​​​​ឈ្មោះ width ឲ្យ​ទៅ​ជា​លេខ 30 វិញ​។

 

នៅ​លើ​បន្ទាត់​លេខ 25 ការសរសរ​ថា instance.height = 10 គឺ​ជា​បញ្ជា​តម្រូវ​ឲ្យ​​ប្តូរ​តម្លៃ​នៃ​ទិន្នន័យ​​សិស្ស ដែល​ជា​អថេរ​ឈ្មោះ height ឲ្យ​ទៅ​ជា​លេខ 10 វិញ​។

 

ដូចនេះ​ យើង​សង្កេត​ឃើញ​ថា ការផ្លាស់ប្តូរ​ទិន្នន័យ​សិស្ស​ អាច​ត្រូវ​ធ្វើ​ឡើ​នៅ​ក្នុង​ថ្នាក់ នៅ​ក្នុង​វិធី​ផ្សេង​ៗ​ក៏​បាន និង​ឬ​នៅ​ខាងក្រៅ​ថ្នាក់​តាមរយៈ​សិស្ស​របស់​ថ្នាក់​ក៏​បាន​​។

 

ការបង្កើត​សិស្ស​ ក៏​ជា​ការបង្កើត​ដែនកំណត់​មួយ​ដែរ ដូចនេះ​ទិន្នន័យ​សិស្ស​មិន​អាច​ត្រូវ​ច្រឡំ​ទៅ​នឹង​​ទិន្នន័យ​សិស្ស​ផ្សេង​ៗ​ទៀត​​បាន​ឡើយ ទោះបី​ជាវត្ថុ​​និង​ឬ​អថេរ​ទាំងនោះ​មាន​ឈ្មោះ​ដូច​គ្នា​ក៏​ដោយ​។ ហើយ​នៅ​ពេល​ដែល​យើង​យក​​​​ទិន្នន័យ​​របស់​សិស្ស​​​ណា​មួ​យ​មក​ប្រើ​ ការស្វែងរក​វត្ថុ​​នោះ​​ត្រូវ​ធ្វើ​ឡើង​នៅ​ក្នុង​សិស្ស​នោះ​មុន​ រួច​បាន​ឡើង​ទៅ​ថ្នាក់​រប់ស​សិស្ស​នោះ​​​។ ពិនិត្យ​កម្មវិធី​ខាង​ក្រោម​នេះ​៖

 

function Area(pi){
  //គំរោង​បង្កើត​ទិន្នន័យ​​សិស្ស​ខុស​ៗ​គ្នា
  this.pi = pi;
}
 
Area.prototype.rectangle = function(width, height){
  var surface = width * height;
  return surface;
}
 
var instance1 = new Area(3.1415);
var instance2 = new Area(3.141592);
 
console.log('ទិន្នន័យ​​ឈ្មោះ pi របស់ instance1 គឺ​៖ ' + instance1.pi);
console.log('ទិន្នន័យ​​ឈ្មោះ pi របស់ instance2 គឺ​៖ ' + instance2.pi);

 

នៅ​លើ​បន្ទាត់​លខ 11 ការសរសេរ​ថា var instance1 = new Area(3.1415) គឺ​ជា​បញ្ជា​តម្រូវ​ឲ្យ​បង្កើត​សិស្ស​ឈ្មោះ instance1 មួយ​ដែល​នៅ​ក្នុង​នោះ​មាន​ទិន្នន័យ​មួយ​មាន​ឈ្មោះ​ថា pi ដែល​ជា​លេខ 3.1415 ។

 

នៅ​លើ​បន្ទាត់​លខ 12 ការសរសេរ​ថា var instance2 = new Area(3.141592) គឺ​ជា​បញ្ជា​តម្រូវ​ឲ្យ​បង្កើត​សិស្ស​ឈ្មោះ instance2 មួយ​ដែល​នៅ​ក្នុង​នោះ​មាន​ទិន្នន័យ​មួយ​មាន​ឈ្មោះ​ថា pi ដែល​ជា​លេខ 3.141592 ។

 

ដូចនេះ​យើ​ងឃើញ​ថា ​instance1 និង​ instance2 មាន​ទិន្នន័យ​មាន​ឈ្មោះ​ pi ដូច​គ្នា​ តែ​ទិន្នន័យ​ទាំងពីរ​នោះ​​គឺ​ជា​អថេរ​​ពីរ​ខុស​​​គ្នា​ ព្រោះ​វា​ស្ថិត​នៅ​ក្នុង​ដែនកំណត់​ដែល​ជា​សិស្ស​ពីរ​ផ្សេង​គ្នា​។

 

មាន​របៀប​ម៉្យាង​ទៀត ដែល​អនុញ្ញាត​អោយ​យើង​អាច​យក​ទិន្នន័យ​ថ្នាក់​ឬ​ទិន្នន័យ​សិស្ស​មក​ប្រើការ​ឬ​មក​ដោះដូរ​តំលៃ​របស់​វា​បាន​ ដោយ​ប្រើប្រាស់​ក្បួន​មាន​ឈ្មោះ​តែ​មួយ​។ ជា​ភាសា​អង់គ្លេស គេ​ហៅ​ក្បួន​នោះ​ថា​ជា​ getter និង setter ។ ពិនិត្យ​កម្មវិធី​ខាង​ក្រោម​នេះ៖

 

function Area(pi){
  //គំរោង​បង្កើត​ទិន្នន័យ​​សិស្ស​ខុស​ៗ​គ្នា
  this.pi = pi;
}
 
//បង្កើត​ក្បួន setter & getter ដើម្បី​​ដោះដូរ​ឬ​យក​ទិន្នន័យសិស្ស pi មក​ប្រើ
Object.defineProperties(Area.prototype, {
    "PI":{
      get: function(){ 
        return this.pi; 
      },
      set: function(value) { 
        this.pi = value;
      }
   },
 })
 
Area.prototype.rectangle = function(width, height){
  var surface = width * height;
  return surface;
}
  
var instance = new Area(3.14);
 
//ប្តូរ​តំលៃ​ទិន្នន័យ​សិស្ស pi តាម​រយៈ​ក្បួន setter
instance.PI = 3.1415;
//យក​ទិន្នន័យ​សិស្ស pi មកប្រើតាម​រយៈ​ក្បួន getter
console.log("តំលៃ​ចុង​ក្រោយ​របស់​ទិន្នន័យ​សិស្ស pi គឺ "+instance.PI);

 

ចាប់​ពី​បន្ទាត់​លេខ 7 ដល់​បន្ទាត់​លេខ 16 គឺ​ជាការ​បង្កើត​ក្បួន​ getter និង setter មាន​ឈ្មោះ​តែ​មួយ​ថា PI() ក្នុង​គោល​បំណង​ដោះដូរ​ឬ​ចំលង​យក​តំលៃ​នៃ​ទិន្នន័យ​សិស្ស pi មក​ប្រើ​ការ។

 

នៅ​លើ​បន្ទាត់​លេខ 24 គឺ​ជា​ការយក​ក្បួន setter PI() មកប្រើ​ដើម្បី​ដោះដូរ​តំលៃ​របស់​ទិន្នន័យ​សិស្ស pi ។

 

នៅ​លើ​បន្ទាត់​លេខ 26 គឺ​ជា​ការយក​ក្បួន getter PI() មកប្រើ​ដើម្បី​ចំលង​យក​ទិន្នន័យ​សិ្ស pi មក​ប្រើការ៕