İstifadəçi Sinifi: Yaradılma
Bəzən JavaScript-in tərkibində olan Class-ların (siniflərin)
imkanları məsələlərin həlli üçün kifayət etmir. Bu zaman istifadəçi öz
class-larının yaradır.
İstifadəçi class-ını yaratmaq üçün nə etmək lazımdır? O qədər çox nə
isə tələb olunmur. Əgər class konstruktora malik deyilsə, onda onun
nüsxəsini sadəcə inisiallaşdırıcı istifadə etməklə new operatoru ilə
yaratmaq lazımdır.
var somePoint; somePoint = new SomePoint(x: 100, y: 50, color: “black”);
Hamısı bu qədər. Bu şəkildə biz bir qrafiki nöqtəni göstərən,
koordinat və rəng xassələri olan obyekt yaratdıq. Artıq indi biz onu
istifadə edə bilərik.
somePoint.y = somePoint.x / 2 + 20;
Hətta yaradılmış bu obyektə xassə əlavə etmək mümkündür.
somePoint.radius = 0.5;
Lakin biz öz sinifimizi yaratmadıq. Öz sinifimizi həqiqətən yaratmaq üçün konstruktor təyin etmək lazımdır.
Əvvəlcədən bildiyimiz kimi konstruktor sinif üçün xassə təyin edir
və onlara susmaya görə (default) qiymət verir. (Susmaya görə qiymət
proqram kodunda sərt olaraq təyin oluna bilər və ya konstruktora
parametr kimi verilə bilər.) Həmçinin konstruktor sinfə metod təyin
edir (əlavə edir).
Gəlin qrafiki nöqtə sinfini yaradaq. Bunun üçün aşağıdakı konstruktoru yazaq.
function Point(x, y, color) { this.x = x; this.y = y; this.color = color; }
Biz cari obyektə istinad etmək (müraciət etmək) üçün yeni this
operatorundan etdik. Bu operatoru yaddan çıxarmayın – o bizə çox lazım
olacaq.
İndi biz Point sinfindən obyekt yarada bilərik.
var somePoint; somePoint = new Point(100, 50, “black”);
Gəlin yenicə yaradılmış Point sinfinə metod əlavə edək. Yadda
saxlayın ki, dəyişən funksiyaya göstərici saxlaya bilər. Bu dəyişən
sinfin xassəsi də ola bilər.
Əvvəlcə funksiya təyin edək. Bu metod koordinatların müəyyən
aralıqda olub olmadığını yoxlayır və buna uyğun olaraq true və ya false
cavabını qaytarır.
function isPointInBounds() { if(this.x>0 && this.x<400) { return (this.y>0 && this.y<200); } else { return false; } }
Yuxarıda elan etdiyimiz Point sinifini yenidən təyin edək.
function Point(x, y, color) { this.x = x; this.y = y; this.color = color; this.isPointInBounds = isPointInBounds; }
Sonuncu sətirdə biz isPointInBounds xassəsinə isPointInBounds
funksiyasına olan göstərici mənimsədirik. İndi biz bu xassəni
isPointInBounds funksiyasını çağırmaq üçün istifadə edə bilərik.
Faktiki olaraq bu funksiya obyektin bir hissəsi olur, yəni metodu.
if(somePoint.isPointInBounds()) { ... }
Əgər istifadəçi xassələrə mənimsətmək üçün lazım olan parametrləri
konstruktora verməyibsə, bu zaman xassə üçün susmaya görə olan
qiymətdən istifadə etmək olar. Bunu etmək üçün || (məntiqi və ya)
operatorunun xüsusi formasından istifadə olunur.
function Point(x, y, color) { this.x = x || 100; this.y = y || 50; this.color = color || “black”; this.isPointInBounds = isPointInBounds; }
Əgər || operatorundan sol tərəfdə olan arqument təyin olunubsa, o
qaytarılır. Əks halda || operatorundan sağ tərəfdə olan arqument
qaytarılır, bizim halda susmaya görə qiymət. Buradan belə çıxır ki, biz
obyekti aşağıdakı şəkildə yarada bilərik:
somePoint = new Point();
İndi biraz əvvələ qayıdaq. İnisiallaşdırıcı ilə yaradılmış obyektə
yeni xassə əlavə etdiyimizi yada salın. Biz eyni hərəkəti konstruktor
ilə yaradılmış somePoint obyekti üçün də edə bilərik.
somePoint.radius = 0.5;
Amma burada qeyd etmək lazımdır ki, əlavə etdiyimiz xassə yalnız
somePoint obyektinə məxsus olur, digər Point sinfindən olan obyektlərdə
bu xassə olmur. Bəs bu xassənin Point sinfində olan bütün obyektlərdə
olmasını necə təmin etmək olar.
|