មាន​យុទ្ធសាស្ត្រ​​ជា​ច្រើនបែប​​យ៉ាង​នៅ​ក្នង​ការសរសេរ​កម្មវិធី​កំព្យូទ័រ។ យុទ្ធសាស្ត្រ​​ទាំងនោះ​មាន​ដូចជា​ការសរសេរ​កម្មវិធី​ដោយ​​ត្រឹម​តែការបង្កើត​ក្បួន​ដែល​ភាសា​អង់គ្លេស​ហៅ​ថា​ procedural programming (PP) និង​ការសរសេរ​កម្មវិធី​​ដោយ​ការ​បង្កើត​ថ្នាក់​ដែល​ភាសា​អង់គ្លេស​ហៅ​ថា object oriented programming (OOP) ​។

 

ដោយ​ឡែក​ ភាសា JavaScript អនុញ្ញាត​អោយ​យើង​​អាច​ប្រើប្រាស់​យុទ្ធសាស្ត្រ​ PP ក៏បាន​ យុទ្ធសាស្ត្រ OOP ក៏​បាន​នៅ​ក្នុង​ការសរសេរ​កម្មវិធី​គ្រប់​បែបយ៉ាង​ទាំងអស់ ដោយ​គ្មានបញ្ហាអ្វី​ឡើយ​។

 

នៅ​ក្នុង​ភាសា JS ថ្នាក់ (class) គឺ​ជា​ក្បួន​ធម្មតា​មួយ ​ដែល​ត្រូវ​គេ​យក​ទៅ​ប្រើប្រាស់​​​ជា​កន្លែង​សម្រាប់​​រក្សា​ទុក​​​វត្ថុ​និង​ឬ​អថេរ​មួយ​ចំនួន​ទៀត​ ដែល​នឹង​ត្រូវ​យក​ទៅ​ប្រើ​ប្រាស់​នៅ​ពេល​ក្រោយ​ៗ​ទៀត​​។ ដើម្បី​បង្កើត​ថ្នាក់ យើង​ត្រូវ​ធ្វើ​ដូច​ខាងក្រោម​នេះ​៖

 

//ការបង្កើត​ក្បួន​ទទេ​មួយ​មានឈ្មោះ​ថា Area 
function Area(){}
 
//ការយក​ក្បួន​ឈ្មោះ​ Area មក​ប្រើ​ជា​ថ្នាក់​សំរាប់​រក្សា​ទុក​​វត្ថុ​និង​ឬ​អថេរ​ផ្សេង​ៗ​
Area.prototype.pi = 3.14;
Area.prototype.rectangle = function(width, height){
  var surface = width * height;
  console.log('ក្រឡាផ្ទៃ​ចតុកោណកែង​គឺ​៖ '+surface);
}

 

នៅ​លើ​បន្ទាត់​លេខ 2 ការសរសេរ​ថា function Area(){} គឺ​ជា​បញ្ជាតម្រូវ​ឲ្យ​បង្កើត​ក្បួន​ឈ្មោះ Area ដែល​ជា​វត្ថុ​ទទេ​ស្អាត​មួយ​។ ក្បួន​ឈ្មោះ Area នេះ​នឹង​ត្រូវ​គេ​យក​ទៅ​ប្រើ​ជា​កន្លែង​សម្រាប់​រក្សា​ទុក​នូវវត្ថុ​មួយ​ចំនួន​​ផ្សេង​ៗ​ទៀត​។

 

នៅ​លើ​បន្ទាត់​លេខ 5 ការសរសេរ​ថា Area.prototype.pi = 3.14 គឺ​ជា​បញ្ជា​តម្រូវ​ឲ្យ​បង្កើត​អថេរ​ឈ្មោះ​ pi មួយ​ទុក​នៅ​ក្នុង​ថ្នាក់​ ដែល​ជា​ក្បួន​មាន​ឈ្មោះ​ថា Area ។

 

ដូចនេះ​​យើង​ឃើញ​ថា នៅ​ក្នុង​ភាសា JavaScript ដើម្បី​បង្កើត​វត្ថុ​និង​ឬ​អថេរ​​ផ្សេង​ៗ​ទុក​នៅ​ក្នុង​ថ្នាក់​ណា​មួយ យើង​ត្រូវ​ប្រើប្រាស់​ពាក្យ​ពិសេស prototype នៅ​ចន្លោះ​ឈ្មោះ​របស់​ថ្នាក់​ និង​ឈ្មោះ​របស់​វត្ថុ​​​និង​រ​អថេរដែល​ត្រូវ​បង្កើត​។

 

នៅ​លើ​បន្ទាត់​លេខ 6 ការសរសេរ​ថា Area.prototype.rectangle = function(width, height) គឺ​ជា​បញ្ជា​តម្រូវ​ឲ្យ​បង្កើត​ក្បួន​មាន​ឈ្មោះ​ថា rectangle មួយ​ទុក​នៅ​ក្នុង​ថ្នាក់​ឈ្មោះ Area ។

 

គ្រប់​វត្ថុ​​និង​ឬ​អថេរទាំងឡាយ​ដែល​ត្រូវ​បាន​បង្កើត​ឡើង​និង​ទុក​នៅ​ក្នុង​ថ្នាក់​ ត្រូវ​គេ​ឲ្យ​ឈ្មោះ​ថា​ជា សម្បត្តិថ្នាក់ (class attribute) ដែល​អាច​ជា​ក្បួន និង​ឬ​ទិន្នន័យ​ផ្សេង​ៗ​។ ក្បួន​នៅ​ក្នុង​ថ្នាក់​ត្រូវ​គេ​​ឲ្យ​ឈ្មោះ​​ថា​ជា វិធី (method) ឯ​ចំណែក​ទិន្នន័យ​នៅ​ក្នុង​ថា្នក់​ ត្រូវ​គេ​ចាត់ទុក​ថា​ជា ទិន្នន័យថ្នាក់ (data attribute) ។ ជាក់ស្តែង នៅ​ក្នុង​ថ្នាក់​ឈ្មោះ Area ខាង​លើ​ អថេរ​ឈ្មោះ pi គឺ​ជា​ទិន្នន័យ​ថ្នាក់ និង​ក្បួន​ឈ្មោះ​ rectangle​ គឺ​ជា​វិធី​។

 

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

 

//ការបង្កើត​ក្បួន​ទទេ​មួយ​មានឈ្មោះ​ថា Area 
function Area(){}
 
//ការយក​ក្បួន​ឈ្មោះ​ Area មក​ប្រើ​ជា​ថ្នាក់​សំរាប់​រក្សា​ទុក​​វត្ថុ​និង​ឬ​អថេរផ្សេង​ៗ​
Area.prototype.pi = 3.14;
Area.prototype.rectangle = function(width, height){
  var surface = width * height;
  console.log('ក្រឡាផ្ទៃ​ចតុកោណកែង​គឺ​៖ '+surface);
}
 
//ការយក​ឈ្មោះ​របស់​​ថ្នាក់ Area ទៅ​ភ្ជាប់​នឹងវត្ថុនិងឬ​អថេរ​ផ្សេង
Area = 1000;
 
console.log('អថេរ​ឈ្មោះ ក្រឡាផ្ទៃ គឺ​ជា​៖ '+Area);

 

នៅ​លើ​បន្ទាត់​លេខ 12 ការសរសេរ​ថា var Area = 1000 គឺ​ជា​​បញ្ជា​តម្រូវ​ឲ្យ​យក​ឈ្មោះ​​របស់​ថ្នាក់​ឈ្មោះ Area ទៅ​ភ្ជាប់​នឹង​អថេរ​​ដែល​ជា​លេខ 1000 វិញ​ម្តង​។ ប្រការ​នេះ​បាន​ធ្វើ​ឲ្យ​ថ្នាក់​នោះ​ក្លាយ​ជា​វត្ថុ​គ្មាន​ឈ្មោះ និង​ត្រូវ​លុប​ចេញ​ពី​សតិ​របស់​កំព្យូទ័រ​ដោយ​យន្តការ​បោស​សំអាត​។

 

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

 

//ការបង្កើត​ក្បួន​ទទេ​មួយ​មានឈ្មោះ​ថា Area 
function Area(){};
 
//ការយក​ក្បួន​ឈ្មោះ​ Area មក​ប្រើ​ជា​ថ្នាក់​សំរាប់​រក្សា​ទុក​​វត្ថុ​​និង​ឬ​អថេរផ្សេង​ៗ​
Area.prototype.pi = 3.14;
Area.prototype.rectangle = function(width, height){
  var surface = width * height;
  console.log('ក្រឡាផ្ទៃ​ចតុកោណកែង​គឺ​៖ '+surface);
}
 
//ការយក​ឈ្មោះ​របស់​​ថ្នាក់​ផ្សេង​ៗ​ទៅ​ភ្ជាប់​នឹង​ឈ្មោះ​របស់​ថ្នាក់​ Area
var plane = layer = Area;
 
console.log(plane);
console.log(layer);
console.log(Area);

 

នៅ​លើ​បន្ទាត់​លេខ 12 ការសរសរ​ថា var plane = layer = Area គឺ​ជា​បញ្ជា​តម្រូវ​ឲ្យ​ភ្ជាប់​ឈ្មោះ ផ្ទៃរាប និង​ ផ្ទៃស្មើ ទៅ​នឹង​វត្ថុ​ដែល​​ជា​ថ្នាក់​មាន​ឈ្មោះ​ថា ក្រឡាផ្ទៃ ។ ជាលទ្ធផល ថ្នាក់​ឈ្មោះ ក្រឡាផ្ទៃ មាន​ឈ្មោះ​រហូត​ដល់​ទៅ​ 3 ។

 

ក្រៅ​ពី​ការផ្តល់​ផលប្រយោជន៍​នៃ​ការរក្សា​ទុក​ក្បួនខ្នាត​និងឬ​​ទិន្នន័យ​ផ្សេង​ៗ​សំរាប់​យក​ទៅ​ប្រើការ​នៅ​ពេល​ក្រោយ​ទៀត (code reused) ថ្នាក់​ផ្តល់​ផល​ប្រយោជន៍​ចំនួន ៣ ថែម​ទៀត​គឺ encapsulation, inheritance, និង polymorphism ។

 

ផល​ប្រយោជន៍​ encapsulation មាន​ន័យ​ថា ថ្នាក់​អាច​ជួយ​រក្សារ​ទុក​នូវ​​ទិន្នន័យ​ទាំងឡាយ​ប្រកប​ដោយ​សុវត្ថភាព​ជាង​​ទិន្នន័យ​នៅ​ក្រៅ​ថ្នាក់ ពីព្រោះ​ទិន្នន័យ​នៅ​ក្នុង​ថ្នាក់​អាច​ត្រូវ​យក​ទៅ​ប្រើប្រាស់​បាន​ តែ​តាម​រយៈ​វិធី​នានា​នៅ​ក្នុង​ថ្នាក់​តែប៉ុណ្ណោះ​ (data hiding) ។

 

ផល​ប្រយោជន៍​ inheritance បាន​ន័យ​ថា​យើង​អាច​យក​ថ្នាក់​នៃ​ក្បួន​ខ្នាត​ផ្សេង​ៗ​ មក​ពង្រីក​អោយ​កាន់​ធំ​ថែម​ទៀត ដោយ​បង្កើត​ថ្នាក់​នៃ​ក្បួន​ខ្នាត​ថ្មី​ៗ​ទៀត​បន្ត​ចេញ​ពី​ថ្នាក់​​​​ដើម​​​ទាំងនោះ​។

 

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