تعداد بازدید: 894

Class in Javascript

class ها یک قابلیت برای تعریف یک سری نوع داده های خاص بر اساس موجودیت های جاری در سیستم است . به طور مثال برای تعریف یک سری person در یک سیستم نیاز به یک کلاس برای تعیین پیکره اصلی این person می باشد .برای تعریف این پیکره از کلاس ها استفاده می کنیم. این گونه از تعریف یک شئ در جاوا اسکریپت به مفاهیم کلاسیک در تعریف اشیا (classical oop concept) می باشد.

Class instance

مثال زیر یک تعریف ساده از Person می باشد . همان طول که مشاهده می کنید هر کلاس از دو بخش کلی تعریف شده است :

  • Properties (Data) : داده های اصلی یک شئ است که در مثال زیر name می باشد. برای تعریف یک ویژگی لازم نیست حتما آن را در بدنه اصلی قرار بدهید . هر زمان که یک شئ را در هر متدی (چه سازنده و چه متد dynamic ) مقدار دهی کردید این ویژگی تعریف شده است . در صورتی که ویژگی private باشد باید حتما در بدنه تعریف کنید (در حالت strict mode خطا خواهیم داشت )
  • Methods : که به آن ها Action نیز می گوییم که شامل عملیات های شئ می باشد و به صورت static , dynamic قابل پیاده سازی است .
class Person {

    constructor(name){
        this.name = name
    }

   setName(name){
      this.name = name
   }

   getName(){
      return this.name
   }

   introduceSelf(){
      console.log(`Hello my name is ${this.name}`)
   }

}

const ali = new Person('ali')
ali.introduceSelf()
ali.setName('Alireza')
ali.introduceSelf()

Class Constructor

در زمان تعریف یک شئ از روی یک کلاس دقیقا تابع constructor تعریف می شود و این متد برای مقدار دهیم internal state کاربرد دارد . به طور مثال name در مثال بالا در سازنده مقدار دهی اولیه شد.

class Person {

   constructor(name){
      this.name = name
   }

   setName(name){
      this.name = name
   }

   getName(){
      return this.name
   }

}

const ali = new Person('Ali')
console.log(ali.name,ali.getName())

مراحل ساخت یک شئ از روی یک کلاس به روال زیر است :

  • ساخت یک شئ و تعیین مکان در حافظه
  • جاری سازی (bind) this در جریان این شئ
  • فراخوانی سازنده . از این مرحله شما می توانید در constructor و سایر متد ها از this استفاده کنید.
  • برگرداندن یک شئ توسط constructor

Getters , Setters

زمانی که یک Property تعریف می کنیم دو موضوع مطرح می شود . موضوع اول نوع سطح دسترسی این ویژگی که به صورت Private , Public است . برای تعریف یک ویژگی به صورت Private با ید ابتدای این ویژگی # قرار بدهیم. موضوع بعدی متد های دسترسی و تغییر این ویژگی است که به آن ها setter , getter می گوییم که در مثال بالا مشهود است .

class Person {
   setName(name){
      this.name = name
   }
   getName(){
      return this.name
   }
}

const ali = new Person
ali.setName('Ali')
console.log(ali.getName())

همان طور که در مثال بالا دیدید یک کلاس می توان سازنده نداشته باشد (omitting constructor). همچنین به روش زیر می توان برای ویژگی های اشیا مقادیر پیش فرض تعیین کرد.

class Person {

  name
  year=1

  constructor(name,year){
    this.name = name
    // this.year = year
  }   

  introduceSelf(){
    console.log(`Hello my name is ${this.name} and on the ${this.year} year`)
  }   

}

inheritance

ارث بری در جاوا اسکریپت به روش کلاسیک با استفاده از کلمه کلیدی extends قابل انجام است . در مثال زیر کلاس والد Person و کلاس فرزند Student می باشد.

class Person {

  construct(name){
    this.name = name
  }

  setName(name){
    this.name = name
  }

  getName(){
    return this.name
  }

  introduceSelf(){
    console.log(`Hello my name is ${this.name}`)
  }

}
class Student extends Person{

  constructor(name,year){
    super(name)
    this.year = year
  }

  introduceSelf(){
    console.log(`Hello my name is ${this.name} and on ${this.year} year`)
  }

}

با استفاده از کلمه کلیدی super در جاوا اسکریپت می توان به متد ها یا ویژگی های کلاس والد دسترسی داشت. کلمه super() به تنهایی برای فراخوانی constructor است و super.{method} برای فراخوانی سایر متد هاست .

class Product {

  setData(title,price){
    this.title = title
    this.price = price
  }

  getData(){
    return [
      this.title,
      this.price
    ]
  }
}
class Hotel extends Product{

  setData(title,price,address){
    super.setData(title,price)
    this.address = address
  }

  getData(){
    return [
      ...[this.address], ...super.getData()
    ]
  }

}

Encapsulation

برای تعریف یک ویژگی به صورت خصوصی حتما آن را باید در بدنه تعریف کرده باشیم و همچنین برای تعریف و دسترسی باید قبل از آن # قرار بدهیم:

class Programmer {

  name
  #year = 3

constructor(name){
  this.name = name
}

isSenior(){
  return this.year > 5
}

}

const ali = new Programmer('Ali')
console.log(ali.isSenior())

این عملیات کپسوله سازی به منظور حفظ ویژگی year بود که یک عملیات حیاتی در کلاس بر اساس آن اتفاق می افتاد . برای تعریف و استفاده از متد خصوصی در بدنه کلاس هم با همین syntax می توان اقدام کرد (# در قبل از آن)

Static Method/Property

برای تعریف یک Property یا Method به صورت static باید کلمه کلیدی static را ابتدای آن بیاورید . برای فراخوانی آن چه داخل و چه خارج کلاس باید از نام کلاس استفاده کنید. استفاده از کلمه کلیدی this در بدنه متد های static غیر مجاز است و همچنین با یک شئ از یک کلاس نمی توان به این ویژگی ها دسترسی پیدا کرد.

class CalculatorLogic {

  static sum(x,y){
    return x + y
  }

  static multiple(x,y){
    return x * y
  }

  static power(x){
    return CalculatorLogic.multiple(x,x)
  }

}

console.log(CalculatorLogic.sum(10,5))
console.log(CalculatorLogic.power(2))
console.log(CalculatorLogic.multiple(4,2))

 

مطالب مشابه

OOP Paradigm fundamental

شئ گرایی یک الگوی تفکر طراحی سیستم های نرم افزاری است که این تفکر باعث نگاشت موجودیت های سیستم (Enitity) یا عملیات ها...

Object Prototype

ویژگی ارث بری یا inheritance یکی از مفاهیم شئ گرایی در زبان های برنامه نویسی مبتنی بر اشیا می باشد. این قابلیت در...

JavaScript Object Basic

اشیا یک ساختمان داده مهم در جاوا اسکریپت است که به صورت کلید مقدار یک سری داده (Data or Property) و یک سری عملکرد...

Javascript Variable Scope – Mutable

هر statement بر اساس جایگاهی از کد که در آن قرار گرفته است سطح دسترسی به سایر قسمت های کد دارد که به آن Scope می گوییم....

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

۰ دیدگاه برای Class in Javascript

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *