មានយុទ្ធសាស្ត្រជាច្រើនបែបយ៉ាងនៅក្នងការសរសេរកម្មវិធីកំព្យូទ័រ។ យុទ្ធសាស្ត្រទាំងនោះមានដូចជាការសរសេរកម្មវិធីដោយត្រឹមតែការបង្កើតក្បួនដែលភាសាអង់គ្លេសហៅថា 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 បានន័យថា នៅក្នុងថ្នាក់ថ្មីរបស់យើង ដែលត្រូវបង្កើតឡើងដោយបន្តចេញពីថ្នាក់ដើមទាំនោះ យើងអាចបង្កើតវិធីនិងឬទិន្នន័យផ្សេងៗមានឈ្មោះដូចគ្នាទៅនឹងវិធីនិងឬទិន្នន័យមួយចំនួន នៅក្នុងថា្នក់ដើម។ ហើយនៅពេលដែលយើងយកវិធីនិងឬទិន្នន័យមានឈ្មោះដូចគ្នាទាំងនោះមកប្រើ វិធីនិងឬទិន្នន័យទាំងនោះនឹងត្រូវប្រែរូបទៅជារបស់ថ្នាក់ណាមួយ អាស្រ័យទៅតាមកាលទេសខុសៗគ្នា៕