Class در جاوا اسکریپت قسمت دوم
در ادامه مقاله قسمت قبلی کلاس (class) و اشیا در جاوا اسکریپت اینبار به مباحث پیشرفته تر و کاربردی تر می پردازیم.
تعریف یک class به عنوان یک عبارت
همانند توابع می توان یک کلاس را به یک شی نسبت داد مانند مثال زیر :
let User = class {
sayHi() {
alert("Hello");
}
};
User.sayHi();
در اینجا مقدار متغییر User
یک کلاس است که می توان ب اشیا آن دسترسی پیدا کرد.
get , set
برای کار با اشیا و به منظور تنظیم کردن مقدار یک عضو و در یافت مقدار یک عضو دو کلمه کلیدی به نام set
, get
وجود دارد . به مثال زیر دقت کنید:
class User {
constructor(name) {
// invokes the setter
this.name = name;
}
get name() {
return this._name;
}
set name(value) {
if (value.length < 4) {
alert("Name is too short.");
return;
}
this._name = value;
}
}
let user = new User("John");
alert(user.name); // John
user = new User(""); // Name too short.
در مثال بالا با استقاده از get
و set
مقدار متغییر _name
خوانده شده و تنظیم شده. دقت نمایید که در کانستراکتور کلاس با استفاده از دستور this.name
درواقع متد set name(value);
فراخوانی شده .
وراثت :
در واقع وراثت یک راهی است برای دسترسی یک کلاس به یک کلاس دیگر.است ب نحوی که کلاس پسر به متد های کلاس پدر دسترسی دارد و در خودش متد ها و اعضا جدید را شامل می شود.
در جاوا اسکریپت برای مبحث وراثت کلمه کلیدی extends
وجود دارد. بدین صورت: class Child extends Parent
بطور مثال
//base class
class Shape {
constructor(name,x,y){
this.name=name;
this.x=x;
this.y=y;
}
get name()
{
return this._name;
}
set name(name)
{
this._name=name;
}
}
//child class
class Rectangle extends Shape{
constructor(x,y,w,h){
super('Rectangle',x,y);
this.w=w;
this.h=h;
}
area()
{
return this.w * this.h;
}
}
// another child
class Circle extends Shape{
constructor(x,y,r)
{
super('Circle',x,y);
this.r=r;
}
area()
{
let ar= this.r*this.r*3.14159;
return ar;
}
}
let ob1 =new Circle(4,10,5);
let ob2=new Rectangle(20,25,4,3);
alert('ob1 name:'+ob1.name +' and ob2 name:'+ob2.name);//ob1 name:Circle and ob2 name:Rectangle
alert('ob1 area:'+ob1.area() +' and ob2 area:'+ob2.area());//ob1 area:78.53975 and ob2 area:12
در مثال بالا ابتدا یک کلاس به نام shape ساخته شده که سه عضو به نام x,y,name دارد. سپس دو کلاس پیاده سازی شده که هر دو مشخصات کلاس shape را به ارث می برند این دو کلاس Circle , Rectangle هستد.
دو شی از این دو کلاس به نام ob1 , ob2 ساخته شده و همانطور که مشخص است این دو شی مشخصات x,y خود را در کلاس shape و مشخصات دیگر همانند مساخت را در کلاس circle و rectangle ذخیره کرند.
در وراثت باید به این نکته دقت کنید که در تابع سازنده کلاس فرزند ابتدا باید تابع سازنده کلاس پدر را با کلامه کلیدی super
صدا زده شود تا ابتدا کلاس پدر ساخته شود و سپس کلاس فرزند ساخته می شود.
در کل کلمه super
هنگامی مهم است که تابعی هم نام کلاس پسر در کلاس پدر وجود داشته باشد در آن صورت ابتدای این تابع باید متد مربوطه کلاس پدر را با این کلمه صدا زد بصورت super.method(arg);
.
منابع این مقاله :
https://javascript.info/class
https://javascript.info/class-inheritance
https://www.w3schools.com/js/js_classes.asp
https://code.tutsplus.com/tutorials/inheritance-and-extending-objects-with-javascript–cms-29836
دیدگاهتان را بنویسید