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:

  1. Person funksiyasının (xırda fərqləri çıxanda adi js funksiyasıdır) prototype-ında
  2. class vasitəsilə yaranan instance-ların özlərində
  3. Person funksiyasının özündə
	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.