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

 

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

 

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

 

class Area{
  constructor(){
    this.pi = 3.14
  }

  rectangle(width,height){
    let surface = width * height
    console.log(`The area of the rectangle is: ${surface}`)
  }

  display(width,height){
    //ការយក​វិធី​ក្នុង​ថ្នាក់ Area មក​ប្រើ​តាម​រយៈ​ឈ្មោះ this
    this.rectangle(width,height)
  }
}

//ការបង្កើត​សិស្ស​នៃ​ថ្នាក់ Area
let instance = new Area()
 
//បង្កើត​ទិន្នន័យ​ឈ្មោះ width ទុក​ក្នុង​សិស្ស​ឈ្មោះ instance
instance.width = 25
 
//បង្កើត​ទិន្នន័យ​ឈ្មោះ height ទុក​ក្នុង​សិស្ស​ឈ្មោះ instance
instance.height = 5
 
console.log(`Width is ${instance.width} long`)
console.log(`Heigh is ${instance.height} long`)

 

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

 

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

 

class Area{
  constructor(){
    //ការបង្កើត​ទិន្នន័យ​ទុក​ក្នុង​សិស្ស
    this.width = 25
    this.height = 5
  }

  rectangle(width,height){
    let surface = width * height
    console.log(`The area of the rectangle is: ${surface}`)
  }

  display(width,height){
    //ការយក​វិធី​ក្នុង​ថ្នាក់ Area មក​ប្រើ​តាម​រយៈ​ឈ្មោះ this
    this.rectangle(width,height)
  }
}

//ការបង្កើត​សិស្ស​នៃ​ថ្នាក់ Area
let instance = new Area()
 
console.log(`Width is ${instance.width} long`)
console.log(`Heigh is ${instance.height} long`)

 

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

 

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

 

class Area{
  constructor(){
    //ការបង្កើត​ទិន្នន័យ​ទុក​ក្នុង​សិស្ស
    this.width = 25
    this.height = 5
  }

  rectangle(width,height){
    let surface = width * height
    console.log(`The area of the rectangle is: ${surface}`)
  }

  display(width,height){
    //ការយក​វិធី​ក្នុង​ថ្នាក់ Area មក​ប្រើ​តាម​រយៈ​ឈ្មោះ this
    this.rectangle(width,height)
  }

  setValue(){
    this.width = 30
  }
}

//ការបង្កើត​សិស្ស​នៃ​ថ្នាក់ Area
let instance = new Area()
 
//ការយក​វិធី​ setValue មកប្រើ​ដើម្បីកំណត់​​តំលៃ​ទិន្នន័យ​សិស្ស
instance.setValue()
console.log(`The new value for width ${instance.width}`)

//ការដូរ​តំលៃ​ទិន្នន័យ​សិស្ស​ដោយ​ផ្ទាល់
instance.height = 10
console.log(`The new value for height is ${instance.height}`)

 

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

 

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

 

class Area{
  constructor(pi){
    //គំរោង​បង្កើត​ទិន្នន័យ​​សិស្ស​ខុស​ៗ​គ្នា
    this.pi = pi
  }

  rectangle(width,height){
    let surface = width * height
    console.log(`The area of the rectangle is: ${surface}`)
  }

  display(width,height){
    //ការយក​វិធី​ក្នុង​ថ្នាក់ Area មក​ប្រើ​តាម​រយៈ​ឈ្មោះ this
    this.rectangle(width,height)
  }

  setValue(){
    this.width = 30
  }
}

let instance1 = new Area(3.1415)
let instance2 = new Area(3.141592)
 
console.log(`pi in instance1 is ${instance1.pi}`)
console.log(`pi in instance2 is ${instance2.pi}`)