demək, class aşağıdakı kimi define oluna bilər:
class Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
yearOfBorn() {
const date = new Date();
return date.getFullYear() - this.age;
}
}
name: string; age: number;
bu hissədə propertiləri declare edirik. sonra constructor-un daxilində onları assign edirik.
typescript bizə bu property declaration və assigning-i bir yerə yığmaq üçün access modifiers-ı təqdim edir. bunlar aşağıdakılardır:
public, private, protected, readonly.
class Person {
constructor(name: string, age: number) {
public name: string,
readonly age: number
}
}
həmçinin parameter properties deyilən şey də var:
class Person {
constructor(public name: string, readonly age: number) {
//...some code
}
}
fikir verirsizsə, public name: string, readonly age: number yazmağa artıq ehtiyac qalmır.
konstruktor funksiyasını əlavə etməsək, typescript (və ya javascript) avtomatik olaraq default boş constructor əlavə edir. sonra constructorda super class-nı çağırmaq olar. bu ondan ötrüdür ki, əgər class digər class-dan extends olubsa, həmin class-ın, yəni parent-in konfiqurasiyasını özününküləşdirsin. əgər subclass-da constructor funksiyası varsa, super mütləq çağrılmalıdır (nə qədər ki, parent class-da default empty constructor yoxdur).
daha sonra constructor function explicit olaraq heç nə return edə bilməz, çünki o class vasitəsilə yaranan instance-ları geri qaytarır.
indi keçirəm bu yazını yazmağımın əsas səbəbinə. yearnOfBorn metodu haqqında. bu metodu üç yerdə saxlaya bilərik:
yearOfBorn() {
const date = new Date();
return date.getFullYear() - this.age;
}
bu şəkildə yazdıqda avtomatik olaraq Person.prototype-a əlavə etmiş oluruq. bu üsul default, memory efficient hesab olunur və çox zaman elə bizə bu lazımdır. bu birinci variant idi.