class در javascript و کاربرد declare

سلام دوستان..تو این پست قصد دارم  نحوه  استفاده  از  declare  رو   توضیح بدم .همچنین  برخی  از  function های  پر استفاده  اون رو به شما معرفی کنم.اما  قبلش باید یه سری مطالب  رو  توضیح بدیم.

اول  نحوه تعریف کلاس  در  javascript 

برای تعریف کلاس در  javascript  چندین  راه وجود داره .1-مثلا  تو Typescript  میتونیم  از کلمه کلیدی  Class  برای  تعریف کلاس  استفاده کنیم...شبیه  java   و #C .

class Person {
    constructor(name, family,age) {
        this.name = name;
        this.family= family;
        this.age= age;
    }
}

2- و یا با استفاده  از از  یک  function  

function Person(name, family,age) {
    this.name = name;
    this.family= family;
    his.age=age;
}

   در واقع  کلاس در  جاوااسکریپت  یک  function بیشتر   نیست..منظور من  TypeScript  نیست..که البته  تو  TypeScript  هم  تعریف  کلاس  شما به  یک function  تبدیل  خواهد شد.

3- با استفاده  از  literal   ها 

var Person = {name: "bahman", family:"rashidi",age:35};

یه چیز مهم  دیگه  که باید  اون رو  بدونیم  اینه که  تو javascript  ,  بحث  ارث  بری  یا  همون  inheritance   یکمی   با  java   و  یا  #c   متفاوته.

تو javascript   ما برای   استفاده  از  مزیت های  ازث بری  باید  از  روش  Prototype-based   استفاده کنیم  که  در مثال  زیر  توضیح داده شده..

var person = {name: "bahman", family:"rashidi",age:35};
var  developer={skill:"dojo"}
Object.setPrototypeOf(developer, person );

تو  مثال  قبلی  دو تا  Object  تعریف کردیم. خط  اول  person  و  خط  دوم   developer.. اما  تو خط سوم  گفتیم که  developer    از  person   ارث بری  کنه..

در واقع  الان   هر  property   که  person  داشته  باشه   ،    developer   هم داره. میتونین  تو مرور گر  خودتون  این  تکه  از  کد رو  کپی  کنین   و  بعد تایپ کنین  developer.age  ..

خواهید دید  که  مقدار  age  رو  به  شما  نشون  میده. جاوا اسکریپت   یه   زبان  prototype-based  است  . و  بار  ارث بری  تو این  زبان  از  روش  prototyp inheritance استفاده میکنیم

البته  تو  TypeScript    و  ES6     کمی  متفاوته  اما  در آخری   با  این شکل  تبدیل خواهد  شد که بحث مفصلی داره..انشالله  اگر  عمری باقی موند  اون ه رو هم  تضیح  خواهم داد.

پس  تا اینجا ما  روش های  تعریف کلاس تو جاوا  اسکریپت  ور  یه مروری  کردیم  و   نحوه   ارث بری تو  جاوااسکریپت  هم  دیدم.

اما  DOJO   امکاناتی  رو برای ما فراهم  کرده  که  تعریف کلاس    ارث بری  رو  راحت  تر  انجام بدیم  و  بهتر مدیریت کنیم

اینجا تازه وارد بحث declare     در Dojo   میشیم.

Declare  یک  function  هست  که داخل  ماژول  "dojo/_base/declare"   تعریف  شده..پس  برای  استفاده  از  این  function   باید  ماژول  رو  Load   کرده باشید.

 در کمی بالاتر  اشاره  کردیم که  تو جاوا اسکریپت  برای  inheritance  از   روش  prototype-based  استفاده میشه. 

declare   این قابلیت رو به  ما میده که  بتونیم   از  روش  class-based inheritance  برای  ارث بری  استفاده کنیم.

define(["dojo/_base/declare"], function(declare){
  return declare(null, {
    constructor: function(name,family, age){
      this.name = name;
      this.family= family;
      this.age = age;

    }
  });
});

فرض کنیم  که ما این تکه  کد رو  تو فایل  person.js    ذخیره  کردیم.

و اما  نحوه  ایجاد  شئ  با این کلاس

require(["my/person"], function(Person){
  var folk = new person("bahman","rashidi",35);
});

میبینید که  اول  باید load  کنیم و  بعد  استفاده  کنیم.

 

   اما  بحث  ارث بری 

یه  کلاس  دیگه  به  اسم  developer   میخوام  ایجاد کنم  که  از person    ارث بری  کنه.

define(["dojo/_base/declare", "anyfolder/person"], function(declare, person){
  return declare(person, {
    constructor: function(name,family, age, salary){


      this.salary = salary;
    },

    askForRaise: function(){
      return this.salary * 0.02;
    }
  });
});

 فرض کنید  تکه  کد  قبلی  رو  در فایل  employ.js   تو یه  فولدری  ذخیره  کردیم..

به این خط  دقت کنیم   declare(Person 

اینجا  تعریف  شده که  کلاس  جدید  ما  از  person    ارث  بری کنه.سازنده کلاس پدر  و یا همون person  همیشه  ، قبل  از سازنده کلاس  فرزند یا همون  developr به  صورت اتوماتیک call  میشه .

فرض کنید کلاس  person  داری  یک  function  است که  دقیقا  همون function    در  developer   تعریف  شده..برای  اینکه  از  داخل  کلاس  developer   بتونیم   function    کلاس    person   رو  صدا بزنیم  ، 

از this.inherited(arguments)   استفاده میکنیم.argument        در   واقع  یا  آرایه   شامل  تمام  آرگومان های  ارسالی  است. احتمالا  تو مثال  ها و سمپل  پروژه ها با this.inherited(arguments)   زیاد  برورد خواهید داشت.

خوب  تا اینجا نحوه تعریف کلاس  و  ارث بری  رو  با استفاده از   Declare    تو dojo   برسی  کردیم

امید واریم   به کارتون  بیاد.. در پناه خدا باشین