-
წინა გაკვეთილში ვისაუბრეთ
ობიექტის ტიპების შექმნაზე
-
და მათ ინიციალიზაციაზე კონსტრუქტორებით.
-
ობიექტის ტიპი არაა აუცილებელი
მხოლოდ თვისებებთან იყოს ასოცირებული
-
შესაძლოა ასევე მისი ფუნქციონალურობასთან
ასოცირება. შეხედე სამყაროს ობიექტის ტიპებს
-
მაგალითად, ჩვენ. გვაქვს სიმაღლე, ასაკი,
მაგრამ ასევე ვიძინებთ, ვჭამთ, კოდს ვწერთ.
-
გვინდა რომ ეს ფუნქციები
იმ ობიექტის ტიპებს შევუსაბამოთ.
-
ამ პროგრამაში, რომელსაც წინა
ვიდეოში ვაკეთებდით, გვქვს ფუნქცია
-
drawWinston, რომელსაც ორივე ვინსტონ
ობიექტზე ვიძახებთ. კარგი არ იქნებოდა, რომ
-
ეს პირდაპირ ვინსტონის ობიექტის ტიპს
მივაბათ? შეგვიძლია და მარტივია.
-
ჩვენს კონსტრუქტორს ქვემოთ,
დავწერთ Winston.prototype,
-
prototype ალბათ ახალი სიტყვაა
რომელიც ადრე არ გინახავთ.
-
prototype არის ობიექტის თვისება, რომელსაც
შეგვიძლია ფუნქციები მივუკავშიროთ
-
და ნებისმიერ მასზე დაფუძნებულ
ობიექტს ასევე ექნება ეს ფუნქციები.
-
შეგვიძლია დავწეროთ .prototype, შემდეგ
წერტილი და ფუნქციის სახელი, draw უდრის,
-
შემდეგ კი ავიღოთ ჩვენი
drawWinston კოდი და ჩავსვათ აქ.
-
ჩვენ ახლა დახატვის ფუნქცია
დავუკავშირეთ Winston-ის პროტოტიპს.
-
ეს იმას ნიშნავს, რომ Winston-ის ტიპის
ობიექტებზე draw()-ს გამოძახება შეგვეძლება.
-
ესეიგი winstonTeen-ზე ან winstonAdult-ზე
draw()-ს გამოძახება უნდა შეგვეძლოს.
-
ასეთ ფუნქციას, რომელიც
შეგვიძლია ობიექტზე გამოვიძახოთ,
-
ვუწოდებთ "მეთოდს", ამიტომ ამიერიდან
ალბათ მეთოდს უფრო ხშირად ვიტყვი.
-
ესეიგი, ეს არის draw მეთოდი.
-
ახლა ამას წავშლით და ვნახოთ
შევძლებთ თუ არა draw()-ს გამოძახებას.
-
winstonTeen.draw()
-
კარგი, შეცდომა გვაქვს, გვეუბნება
რომ winsObject არ არის განმარტებული.
-
კარგი, აქამდე არგუმენტს drawWinston-ს
გადავცემდით, რომელიც Winston ობიექტი იყო
-
ახლა კი ამას აღარ ვაკეთებთ.
შეგვიძლია შევცვალოთ გადასაცემად
-
და შემდეგ.. აქ რა უნდა გადავცეთ?
უნდა გადავცეთ winstonTeen.
-
იმუშავა, მაგრამ სასაცილო ჩანს.
ობიექტზე draw-ს ისედაც ვიძახებ.
-
არაა აუცილებელი
ობიექტის გადაცემაც, გამეორებაა.
-
ესეიგი ეს არ უნდა გავაკეთოთ,
ამიტომ წავშალოთ აქედან.
-
თუ ობიექტში ვართ, რა შეგვიძლია გამოვიყენოთ
რომ დავუკავშირდეთ ობიექტის თვისებებს?
-
შესაძლოა კონსტრუქტორს შეხედოთ და გაიხსენოთ
სპეციალური სიტყვა "this" და იფიქროთ:
-
"იქნებ ამის მაგივრად "this" დავწერო!"
შევცვალოთ winsObject და დავწეროთ "this".
-
ეს იმიტომ, რომ ახლა ობიექტში ვართ.
ფუნქცია ობიექტზეა გამოძახებული,
-
ამიტომ "this" მიმდინარე ობიექტს შეეხება.
-
ესეიგი, შეგიძლია დაწერო "this" და მიიღო
წვდომა მიმდინარე ობიექტის თვისებებზე.
-
მუშაობს, ხედავ? მაგარია, არა?
-
ესეიგი, ახლა შეგვიძლია
დავწეროთ winstonAdult.draw()
-
წვდომა გვაქვს winstonAdult-ის თვისებებზე,
რადგან ფუნქცია ამ ობიექტზეა გამოძახებული.
-
ეს არის "this"-ის ძალიან კარგი თვისება,
მიუხედავად იმისა ,რომ ზოგჯერ დამაბნეველია.
-
კარგი, გავერთეთ. ახლა კიდევ ერთი მეთოდი
დავუმატოთ. კიდევ რა გააკეთოს ვინსტონმა?
-
მოდი, ვალაპარაკოთ. Winston.prototype.talk
რომ შეგვეძლოს ბევრი ფუნქციის მიკავშირება.
-
ვათქმევინოთ "მე ვარ ვინსტონი!"
-
შემდეგ დავწერთ this.x+20 და this.y + 150.
-
არაფერი მომხდარა, მაგრამ ეს იმიტომ,
რომ ჯერ ეს ფუნქცია არ გამომიძახებია.
-
ახლა teen ვალაპარაკოთ, winstonTeen.talk()
-
მე ვარ ვინსტონი,
ესეც ასე! და winstonAdult.talk()
-
კარგი, ახლა გვაქვს ვინსტონის ობიექტის
ტიპი რომელსაც აქვს თვისებები: მეტსახელი,
-
ასაკი, x, y; ასევე,
ფუნქციონალურობა: ქცევა, მეთოდები;
-
რომლებიც თვისებების მიხედვით განსხვავდება.
-
და შეგვიძლია გამოვიყენოთ winston-ის
იმდენი შემთხვევა, რამდენიც გვინდა
-
და მათზე გამოვიძახოთ ეს ნებისმიერი მეთოდი.
-
მაგარია, არა?