WEBVTT 00:00:00.780 --> 00:00:06.234 წინა გაკვეთილში ვისაუბრეთ ობიექტის ტიპების შექმნაზე 00:00:06.234 --> 00:00:09.234 და მათ ინიციალიზაციაზე კონსტრუქტორებით. 00:00:09.234 --> 00:00:13.472 ობიექტის ტიპი არაა აუცილებელი მხოლოდ თვისებებთან იყოს ასოცირებული 00:00:13.472 --> 00:00:18.806 შესაძლოა ასევე მისი ფუნქციონალურობასთან ასოცირება. შეხედე სამყაროს ობიექტის ტიპებს 00:00:18.806 --> 00:00:26.287 მაგალითად, ჩვენ. გვაქვს სიმაღლე, ასაკი, მაგრამ ასევე ვიძინებთ, ვჭამთ, კოდს ვწერთ. 00:00:26.287 --> 00:00:30.939 გვინდა რომ ეს ფუნქციები იმ ობიექტის ტიპებს შევუსაბამოთ. 00:00:30.939 --> 00:00:35.949 ამ პროგრამაში, რომელსაც წინა ვიდეოში ვაკეთებდით, გვქვს ფუნქცია 00:00:35.949 --> 00:00:41.826 drawWinston, რომელსაც ორივე ვინსტონ ობიექტზე ვიძახებთ. კარგი არ იქნებოდა, რომ 00:00:41.826 --> 00:00:48.569 ეს პირდაპირ ვინსტონის ობიექტის ტიპს მივაბათ? შეგვიძლია და მარტივია. 00:00:48.569 --> 00:00:55.725 ჩვენს კონსტრუქტორს ქვემოთ, დავწერთ Winston.prototype, 00:00:55.725 --> 00:00:59.232 prototype ალბათ ახალი სიტყვაა რომელიც ადრე არ გინახავთ. 00:00:59.232 --> 00:01:05.881 prototype არის ობიექტის თვისება, რომელსაც შეგვიძლია ფუნქციები მივუკავშიროთ 00:01:05.881 --> 00:01:13.309 და ნებისმიერ მასზე დაფუძნებულ ობიექტს ასევე ექნება ეს ფუნქციები. 00:01:13.309 --> 00:01:21.052 შეგვიძლია დავწეროთ .prototype, შემდეგ წერტილი და ფუნქციის სახელი, draw უდრის, 00:01:21.052 --> 00:01:28.546 შემდეგ კი ავიღოთ ჩვენი drawWinston კოდი და ჩავსვათ აქ. 00:01:28.546 --> 00:01:35.311 ჩვენ ახლა დახატვის ფუნქცია დავუკავშირეთ Winston-ის პროტოტიპს. 00:01:35.311 --> 00:01:40.008 ეს იმას ნიშნავს, რომ Winston-ის ტიპის ობიექტებზე draw()-ს გამოძახება შეგვეძლება. 00:01:40.008 --> 00:01:45.411 ესეიგი winstonTeen-ზე ან winstonAdult-ზე draw()-ს გამოძახება უნდა შეგვეძლოს. 00:01:45.411 --> 00:01:49.569 ასეთ ფუნქციას, რომელიც შეგვიძლია ობიექტზე გამოვიძახოთ, 00:01:49.569 --> 00:01:54.833 ვუწოდებთ "მეთოდს", ამიტომ ამიერიდან ალბათ მეთოდს უფრო ხშირად ვიტყვი. 00:01:54.833 --> 00:01:58.272 ესეიგი, ეს არის draw მეთოდი. 00:01:58.272 --> 00:02:04.103 ახლა ამას წავშლით და ვნახოთ შევძლებთ თუ არა draw()-ს გამოძახებას. 00:02:04.103 --> 00:02:07.069 winstonTeen.draw() 00:02:07.069 --> 00:02:13.697 კარგი, შეცდომა გვაქვს, გვეუბნება რომ winsObject არ არის განმარტებული. 00:02:13.697 --> 00:02:20.530 კარგი, აქამდე არგუმენტს drawWinston-ს გადავცემდით, რომელიც Winston ობიექტი იყო 00:02:20.530 --> 00:02:26.462 ახლა კი ამას აღარ ვაკეთებთ. შეგვიძლია შევცვალოთ გადასაცემად 00:02:26.462 --> 00:02:30.819 და შემდეგ.. აქ რა უნდა გადავცეთ? უნდა გადავცეთ winstonTeen. 00:02:30.819 --> 00:02:38.441 იმუშავა, მაგრამ სასაცილო ჩანს. ობიექტზე draw-ს ისედაც ვიძახებ. 00:02:38.441 --> 00:02:43.965 არაა აუცილებელი ობიექტის გადაცემაც, გამეორებაა. 00:02:43.965 --> 00:02:48.465 ესეიგი ეს არ უნდა გავაკეთოთ, ამიტომ წავშალოთ აქედან. 00:02:48.465 --> 00:02:54.404 თუ ობიექტში ვართ, რა შეგვიძლია გამოვიყენოთ რომ დავუკავშირდეთ ობიექტის თვისებებს? 00:02:54.404 --> 00:03:00.374 შესაძლოა კონსტრუქტორს შეხედოთ და გაიხსენოთ სპეციალური სიტყვა "this" და იფიქროთ: 00:03:00.374 --> 00:03:08.573 "იქნებ ამის მაგივრად "this" დავწერო!" შევცვალოთ winsObject და დავწეროთ "this". 00:03:08.573 --> 00:03:12.951 ეს იმიტომ, რომ ახლა ობიექტში ვართ. ფუნქცია ობიექტზეა გამოძახებული, 00:03:12.951 --> 00:03:16.861 ამიტომ "this" მიმდინარე ობიექტს შეეხება. 00:03:16.861 --> 00:03:23.271 ესეიგი, შეგიძლია დაწერო "this" და მიიღო წვდომა მიმდინარე ობიექტის თვისებებზე. 00:03:23.271 --> 00:03:26.720 მუშაობს, ხედავ? მაგარია, არა? 00:03:26.720 --> 00:03:31.907 ესეიგი, ახლა შეგვიძლია დავწეროთ winstonAdult.draw() 00:03:31.907 --> 00:03:38.271 წვდომა გვაქვს winstonAdult-ის თვისებებზე, რადგან ფუნქცია ამ ობიექტზეა გამოძახებული. 00:03:38.271 --> 00:03:45.752 ეს არის "this"-ის ძალიან კარგი თვისება, მიუხედავად იმისა ,რომ ზოგჯერ დამაბნეველია. 00:03:45.752 --> 00:03:52.028 კარგი, გავერთეთ. ახლა კიდევ ერთი მეთოდი დავუმატოთ. კიდევ რა გააკეთოს ვინსტონმა? 00:03:52.028 --> 00:04:01.078 მოდი, ვალაპარაკოთ. Winston.prototype.talk რომ შეგვეძლოს ბევრი ფუნქციის მიკავშირება. 00:04:01.078 --> 00:04:05.241 ვათქმევინოთ "მე ვარ ვინსტონი!" 00:04:05.241 --> 00:04:13.181 შემდეგ დავწერთ this.x+20 და this.y + 150. 00:04:13.181 --> 00:04:19.734 არაფერი მომხდარა, მაგრამ ეს იმიტომ, რომ ჯერ ეს ფუნქცია არ გამომიძახებია. 00:04:19.734 --> 00:04:25.068 ახლა teen ვალაპარაკოთ, winstonTeen.talk() 00:04:25.068 --> 00:04:30.479 მე ვარ ვინსტონი, ესეც ასე! და winstonAdult.talk() 00:04:30.479 --> 00:04:36.828 კარგი, ახლა გვაქვს ვინსტონის ობიექტის ტიპი რომელსაც აქვს თვისებები: მეტსახელი, 00:04:36.828 --> 00:04:41.406 ასაკი, x, y; ასევე, ფუნქციონალურობა: ქცევა, მეთოდები; 00:04:41.406 --> 00:04:45.026 რომლებიც თვისებების მიხედვით განსხვავდება. 00:04:45.026 --> 00:04:48.359 და შეგვიძლია გამოვიყენოთ winston-ის იმდენი შემთხვევა, რამდენიც გვინდა 00:04:48.359 --> 00:04:50.999 და მათზე გამოვიძახოთ ეს ნებისმიერი მეთოდი. 00:04:50.999 --> 00:04:53.460 მაგარია, არა?