យើងបានដឹងរួចមកហើយថា សិស្សគឺជាលទ្ធផលបានមកពីការយកថ្នាក់មកប្រើជាមួយនឹងប្រមាណសញ្ញា 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}`)