წინა გაკვეთილში ვისაუბრეთ ობიექტის ტიპების შექმნაზე
და მათ ინიციალიზაციაზე კონსტრუქტორებით.
ობიექტის ტიპი არაა აუცილებელი მხოლოდ თვისებებთან იყოს ასოცირებული
შესაძლოა ასევე მისი ფუნქციონალურობასთან ასოცირება. შეხედე სამყაროს ობიექტის ტიპებს
მაგალითად, ჩვენ. გვაქვს სიმაღლე, ასაკი, მაგრამ ასევე ვიძინებთ, ვჭამთ, კოდს ვწერთ.
გვინდა რომ ეს ფუნქციები იმ ობიექტის ტიპებს შევუსაბამოთ.
ამ პროგრამაში, რომელსაც წინა ვიდეოში ვაკეთებდით, გვქვს ფუნქცია
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-ის იმდენი შემთხვევა, რამდენიც გვინდა
და მათზე გამოვიძახოთ ეს ნებისმიერი მეთოდი.
მაგარია, არა?