سلام دوستان..تو این پست قصد دارم نحوه استفاده از 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 برسی کردیم
امید واریم به کارتون بیاد.. در پناه خدا باشین