Prototip istifadə etmək

Çıxış var - obyektin prototipini istifadə edin və xassə əlavə edin.
Prototip - bu bir növ obyektin sinfinə istinaddır. JavaScript-də olan bütün siniflərin (hətta JavaScript-in daxili siniflərinin) prototype adlı xassəsi var və onun prototipini göstərir. Prototipi sinfi genişləndirmək üçün istifadə edirik.

Obyektə xassə əlavə etmək üçün aşağıdakı kodun əvəzinə


somePoint.radius = 0.5;
yeni xassəni onun prototipinə daxil edək (istənilən sinfə məxsus olan prototype xassəsini istifadə edərək):

Point.prototype.radius = 0.5;
İndi isə, Point sinfindən olan bütün obyektlərin radius xassəsi var. Lakin ancaq somePoint obyektinin radius xassəsi 0.5-ə mənimsədilib, digər obyektlərdə isə, bu qiymət təyin olunmayıb.
Biz həmçinin daxili sinifləri də dəyişə bilərik, xassə və metod əlavə edə bilərik. Məsələn, Math sinfinə lazımi riyazi funksiyalar və konstantlar əlavə edə bilərik.

Lakin prototipi digər məqsədlər üçün də istifadə etmək olar. Məsələn, biz sinfi irsən ala bilərik. Misal üzərində izah edək.
Tutaq ki, biz Point sinfinə bir neçə yeni xassə əlavə etmək istəyirik. Bunu hansı şəkildə edək? Əlavə olunacaq bütün yeni xassələri həmin sinifdən olan hər hansı obyektə növbə ilə əlavə etmək olar, lakin bu, çox da yaxşı deyil. Bunu başqa cür edək. Yeni SuperPoint nöqtə sinfi yazaq və bu sinifdə köhnə Point sinfinin bütün xassə və metodlarını irsən alaq. SuperPoint sinfi Point sinfinin varisi olacaq və valideyninin (və ya əcdadının) bütün xassə və metodlarını istifadə edə biləcək. Bu şəkildə biz iki nöqtə sinfinə malik olacağıq: sadə və təkmilləşdirilmiş.

Əvvəlcə SuperPoint sinfini və onun bütün yeni xassələrini təyin edək. Və bizim koda sətir-sətir baxaq.

function SuperPoint(x, y, color, radius, edgeColor)
{
Bura qədər hər şey aydındır. Yeni sinif üçün konstruktor funksiyası təyin etdik. Qeyd edək ki, konstruktorun parametr siyahısında həm yeni xassələri elan etdik, həm də irsən valideyn sinifdən alınan xassələri elan etdik.

this.base = Point;
this.base(x, y, color);
Biz SuperPoint sinfinin yeni base xassəsini təyin etdik və ona Point sinfinin konstruktoruna göstərici mənimsətdik. Bundan sonra, valideyn sinfin konstruktorunu tələb olunan parametrləri verərək çağırdıq. Bu çağırmanın nəticəsində valideyn sinifdən irsən alınan bütün xassələr qiymət aldı. Base xassəsinin adı burada bir rol oynamır, yalnız rahatlıq üçün belə seçilib.

this.radius = radius || 0.5;
this.edgeColor = edgeColor || "black";
Burada isə, yeni xassələrə ilkin qiymət veririk. Bu xassələr üçün susmaya görə qiymət təyin olunduğuna diqqət yetirin. Bu susmaya görə təyin olunan qiymətlər, əgər bizim bu sinfi istifadə edən proqramçı təyin olunan qiymətlərdən birini (və ya ümumiyyətlə heç birini) konstruktora verməzsə, istifadə olunur. Susmaya görə qiymət yaxşı stil proqramlaşdırmadır.

}
SuperPoint.prototype = new Point;
Qeyd edək ki, bu sətir konstruktorun gövdəsindən kənarda yerləşir.
Artıq indi yeni sinifdən obyekt yarada və onun yeni xassələri kimi, irsən alınan xassələrini də istifadə edə bilərik.

var obj;
obj = new SuperPoint(100, 100, “green”, 0.6);
Burada biz konstruktora bütün parametrləri vermədik, lakin bu qəribə deyil, axı biz xassə üçün susmaya görə qiymətə baxmışıq.

obj.radius = Math.SQRT(5);
İndi biz SuperPoint sinfinin yeni xassəsinə müraciət etdik və ona 5-in kvadratı qiymətini mənimsətdik.

a = obj.x + 20;
İndi isə, Point sinfindən irsən alınan xassəyə müraciət etdik.
Biz valideyn sinfindən irsən alınan istənilən xassə və ya metodu yenidən təyin (override) edə bilərik. Daha bir sadə misala baxaq.

function SuperPuperPoint(x, y, color, radius, edgeColor)
{
this.base = SuperPoint;
this.base(x, y, color, radius, edgeColor);
this.isPointInBounds = isPointInBounds2;
Burada biz isPointInBounds xassəsinə digər isPointInBounds2 funksiyasına göstərici mənimsədərək, isPointInBounds metodunu yenidən təyin etdik.

}
SuperPuperPoint.prototype = new SuperPoint;
Və bizim yeni sinfin valideynini göstərməyi unutmayın.
Point, SuperPoint və SuperPuperPoint siniflərinin tam kodları aşağıda verilmişdir.

<html>
  <head>
    <title>
			Class Test
    </title>
    <script language="JavaScript">

			// Begin Declaration Point class
			function Point(x, y, color)
			{
				this.x = x || 100;
				this.y = y || 50;
				this.color = color || “black”;
				this.isPointInBounds = isPointInBounds;
			}
			
			function isPointInBounds()
			{
				if(this.x>0 && this.x<400)
				{
					return (this.y>0 && this.y<200);
				}
				else
				{
					return false;
				}
			}
			// End Declaration Point class
			
			// Begin Declaration SuperPoint class
			function SuperPoint(x, y, color, radius, edgeColor)
			{
				this.base = Point;
				this.base(x, y, color);
				this.radius = radius || 0.5;
				this.edgeColor = edgeColor || “black”;
			}
			SuperPoint.prototype = new Point;
			// End Declaration SuperPoint class
			
			// Begin Declaration SuperPuperPoint class
			function SuperPuperPoint(x, y, color, radius, edgeColor)
			{
				this.base = SuperPoint;
				this.base(x, y, color, radius, edgeColor);
				this.isPointInBounds = isPointInBounds2;
			}
			SuperPuperPoint.prototype = new SuperPoint;
			
			function isPointInBounds2()
			{
				if(this.x>0 && this.x<300)
				{
					return (this.y>0 && this.y<300);
				}
				else
				{
					return false;
				}
			}
			// End Declaration SuperPuperPoint class

    </script>    
  </head>

  <body>    
  </body>
</html>

«« Yaradılma    Prototip istifadə etmək
Share


Muəllif: Sirus Rəhimov


YER Hostinq

Pulsuz elanlar saytı

Internet Jobs Database