WEBVTT 00:00:01.187 --> 00:00:03.173 დავბრუნდით ვინსტონების შემქმნელ პროგრამაში, 00:00:03.173 --> 00:00:07.589 მაგრამ მე დავამატე ახალი ობიექტი - ჰოპერი, რადგან ჰოპერი 00:00:07.589 --> 00:00:11.924 თავს გამოტოვებულად გრძნობდა. მას ვინსტონის მსგავსად განვმარტავ, 00:00:11.924 --> 00:00:15.843 ვიწყებ კონსტრუქციული ფუნქციით და იგივე თვისებებით, დახატვით, 00:00:15.843 --> 00:00:23.808 ლაპარაკით და კიდევ დავამატე ფუნქცია "ვაშა" რადგან ჰოპერები სიხარულს გამოხატავენ. 00:00:23.808 --> 00:00:31.174 ფუნქციის ბოლოში შევქმენი ორი ახალი ჰოპერის ობიექტი: პატარა ჰოპერი და დიდი ჰოპერი. 00:00:31.174 --> 00:00:35.347 დავხატე ისინი, ერთზე გამოვიძახე "ლაპარაკი", მეორეზე - "ვაშა". 00:00:35.347 --> 00:00:37.508 ძალიან კარგი. 00:00:37.508 --> 00:00:39.928 ახლა, ამ კოდს თუ დაუკვირდებით, 00:00:39.928 --> 00:00:41.823 შესაძლოა საინტერესო რამ შენიშნოთ. 00:00:41.973 --> 00:00:52.324 ჰოპერის კოდი ძალიან ჰგავს ვინსტონისას. დაუკვირდით კონსტრუქტორს, ზუსტად იგივეა. 00:00:52.324 --> 00:01:00.748 ლაპარაკის ფუნქციაც ზუსტად შეესაბამება ვინსტონის ლაპარაკის ფუნქციას, 00:01:00.763 --> 00:01:03.897 ასევე, ორივეს აქვს დახატვის ფუნქცია. 00:01:03.897 --> 00:01:07.922 ესეიგი ამ ორ ობიექტს ბევრი საერთო აქვს, 00:01:07.922 --> 00:01:12.601 ეს იმიტომ, რომ ჰოპერი და ვინსტონი ძალიან მსგავსი ობიექტის ტიპებია. 00:01:12.601 --> 00:01:15.299 თუ დაუფიქრდებით, ნამდვილ სამყაროში, 00:01:15.299 --> 00:01:21.423 კომპიუტერს გარეთ ობიექტების უმეტესობას სხვა ობიექტებთან რაღაც საერთო აქვს. 00:01:21.423 --> 00:01:23.643 მაგალითად, ცხოველთა სამეფო. 00:01:23.643 --> 00:01:26.812 ყველა ცხოველი მსგავსია, მაგრამ ისინი სხვადასხვა ტიპისანი არიან, 00:01:26.812 --> 00:01:31.588 როგორც ადამიანები. ადამიანებსაც აქვთ ეს მსგავსებები, 00:01:31.588 --> 00:01:34.331 მაგრამ მათ თავიანთი უნიკალური თვისებებიც გააჩნიათ. 00:01:34.331 --> 00:01:41.647 ესეიგი ცხოველი ობიექტის ტიპია, რომლისგან ადამიანის ობიექტის ტიპი თვისებებს იძენს. 00:01:41.647 --> 00:01:46.864 ნულიდან დაწყება არ გვიწევს, ცხოველების არსებულ თვისებებს ჩვენსას ვუმტებთ. 00:01:46.864 --> 00:01:49.196 ყველა ცხოველი უშვებს ხმას, 00:01:49.196 --> 00:01:51.407 ადამიანებს კი ენაც აქვთ. 00:01:51.407 --> 00:01:56.695 ეს ობიექტის მემკვიდრეობითობა პროგრამირებაშიც ძალიან გამოსადეგია. 00:01:56.695 --> 00:01:59.865 Javascript შეგვიძლია მემკვიდრეობის ჯაჭვი შევქმნათ. 00:01:59.865 --> 00:02:04.425 უნდა მოვიფიქროთ რა არის საერთო ობიექტის ტიპებს შორის 00:02:04.425 --> 00:02:06.633 და მოვიფიქროთ კარგი სახელი, 00:02:06.633 --> 00:02:08.675 რადგან უნდა შევქმნათ ახალი ობიექტის ტიპი, 00:02:08.675 --> 00:02:10.576 რომელიც წარმოადგენს საფუძველ ობიექტს, 00:02:10.576 --> 00:02:12.094 ამიტომ დავარქვათ "არსებები". 00:02:12.094 --> 00:02:13.873 ორივე არსებაა. 00:02:13.873 --> 00:02:17.831 ესეიგი ვამბობთ var არსება უდრის. ახლა გვჭირდება კონსტრუქტორი ფუნქცია. 00:02:17.831 --> 00:02:22.342 მოდი უბრალოდ ჰოპერის მოვიპაროთ, რაც იგივე ვინსტონისაა. 00:02:22.342 --> 00:02:23.762 კარგი. 00:02:23.762 --> 00:02:27.172 ახლა, ვნახოთ... 00:02:27.172 --> 00:02:28.135 ახლა გვინდა... 00:02:28.135 --> 00:02:29.506 ახლა რისი გაკეთება გვინდა? 00:02:29.506 --> 00:02:31.966 ალბათ, ჯობს ფუნქცია "ლაპარაკი" დავამატოთ. 00:02:31.966 --> 00:02:39.303 "ლაპარაკი" ფუნქციისთვის ისევ ჰოპერს მოვპაროთ. ჯერ არსების პროტოტიპს მოვარგებთ. 00:02:39.303 --> 00:02:41.683 ძალიან კარგი. 00:02:41.683 --> 00:02:45.300 ახლა გვაქვს არსების ობიექტის ტიპი. 00:02:45.300 --> 00:02:53.830 საჭიროა ჰოპერს ვუთხრათ რომ ის "არსების" საფიძველში უნდა იყოს. 00:02:53.830 --> 00:03:02.015 დავწეროთ Hopper.prototype = object.create 00:03:02.015 --> 00:03:04.977 creature.prototype 00:03:04.977 --> 00:03:14.197 Javascript-ს ჰოპერის ფუნქციონალურობას ეს ხაზი "არსების" პროტოტიპზე დააფუძნებინებს. 00:03:14.197 --> 00:03:22.342 ესეიგი ჰოპერის ფუნქციის მოძებნისას ჯერ ნახავს ჰოპერის პროტოტიპს, 00:03:22.342 --> 00:03:26.429 თუ აქ ვერ იპოვის, შემდეგ მოძებნის არსების პროტოტიპში. 00:03:26.429 --> 00:03:29.196 ამას ეწოდება პროტოტიპის ჯაჭვი. 00:03:29.196 --> 00:03:35.634 ამის გაკეთების შემდეგ შეგვიძლია ჰოპერის ლაპარაკის ფუნქციის წაშლა, 00:03:35.634 --> 00:03:38.302 რადგან ის უკვე არსებას გააჩნია, 00:03:38.302 --> 00:03:40.231 რომელიც პროტოტიპის ჯაჭვში ზემოთაა. 00:03:40.231 --> 00:03:42.021 მზად ხართ? 00:03:42.021 --> 00:03:43.924 იმუშავა! 00:03:43.924 --> 00:03:48.864 მუშაობს, რადგან პოულობს არსების პროტოტიპში. 00:03:48.864 --> 00:03:54.654 ახლა ვინსტონის წაშლაც ვცადოთ. 00:03:54.654 --> 00:03:57.680 წერია რომ ობიექტს არ აქვს ლაპარაკის მეთოდი. 00:03:57.680 --> 00:04:01.263 რატომ? იმიტომ რომ გვაქვს ვინსტონის კონსტრუქტორი, 00:04:01.263 --> 00:04:03.517 დახატვა, ლაპარაკი კი მოვაშორეთ. 00:04:03.517 --> 00:04:08.509 დაგვავიწყდა რომ ვინსტონის პროტოტიპი არსების პროტოტიპზე დაგვეფუძნებინა. 00:04:08.509 --> 00:04:10.711 ეს ხაზიც აუცილებელია. 00:04:10.711 --> 00:04:14.383 Winston.prototype=object.create 00:04:14.383 --> 00:04:17.614 creature.prototype. 00:04:17.614 --> 00:04:19.110 ესეც ასე! 00:04:19.110 --> 00:04:20.426 დაუკვირდით იმას, რომ 00:04:20.426 --> 00:04:27.438 ეს ხაზი კონსტრუქტორი ფუნქციის შემდეგაა, მაგრამ ნებისმიერი სხვა რამის დამატებამდე. 00:04:27.438 --> 00:04:29.334 სწორედ ამისი გაკეთებაა საჭირო. 00:04:29.334 --> 00:04:33.800 ამით ვამბობთ თუ რაზე იქნება საწყისი პროტოტიპი დაფუძნებული. 00:04:33.860 --> 00:04:36.804 პროტოტიპს კიდევ რაღაცებს ვამატებთ, 00:04:36.804 --> 00:04:41.673 რადგან შესაძლოა რამე უნიკალური იყოს ვინსტონში, ან ჰოპერში, 00:04:41.673 --> 00:04:43.909 რაც ზოგადად არსებებს არ ახასიათებთ. 00:04:43.909 --> 00:04:45.405 ანუ მათი განმარტვა დაშვებულია. 00:04:46.505 --> 00:04:50.256 თუ დავუკვირდებით, გარკვეული კოდი ისევ მეორდება. 00:04:50.256 --> 00:04:51.524 კონსტრუქტორი კოდი. 00:04:51.524 --> 00:04:53.366 ეს სამჯერაა დაწერილი. 00:04:53.366 --> 00:04:58.038 შეგვიძლია უბრალოდ წაშლა? 00:04:58.038 --> 00:05:00.840 ვცადოთ. 00:05:00.840 --> 00:05:03.509 როგორც ჩანს არ იმუშავა. 00:05:03.509 --> 00:05:07.340 ჰოპერი მარცხენა ზედა კუთხეშია, თითქოს ყველაფერი დაავიწყდა. 00:05:07.340 --> 00:05:15.884 Javascript არ თვლის რომ იგივე კონსტრუქტორი გინდა, რადგან პროტოტიპი მასზე დააფუძნე. 00:05:15.884 --> 00:05:19.359 საშუალებას გაძლევს შენ თვითონ განსაზღვრო კონსტრუქტორი ამ ობიექტებისთვის. 00:05:19.359 --> 00:05:26.398 ასევე, იძლევა მარტივ გზას კონსტრუქტორის ობიექტიდან გამოძახებისთვის. 00:05:26.398 --> 00:05:27.766 ასე მოვიქცეთ: 00:05:27.766 --> 00:05:35.470 დავწეროთ creature.callthis,nickname,age,x,y 00:05:35.470 --> 00:05:40.598 ეს ასეთ რამეს აკეთებს (იმუშავა!), 00:05:40.598 --> 00:05:43.679 იძახებს არსების ფუნქციას და კონსტრუქტორ ფუნქციას. 00:05:43.679 --> 00:05:49.019 იძახებს ფუნქციას და ეუბნება რომ გამოიძახოს კონსტრუქტორი ფუნქცია, 00:05:49.019 --> 00:05:56.968 თითქოს ის ობიექტი ჰოპერიდან იყოს ამ არგუმენტებით გამოძახებული. 00:05:56.968 --> 00:05:59.427 ეს ის არგუმენტებია, რითაც ვიძახებთ ჰოპერს. 00:05:59.427 --> 00:06:03.589 საბოლოოდ ეს კოდი შესრულდება, თითქოს აქ ეწერა. 00:06:03.589 --> 00:06:06.257 ჩვენც სწორედ ეს გვინდა. იმუშავა. 00:06:06.257 --> 00:06:13.757 შეგვიძლია ეს ხაზიც ვინსტონის კონსტრუქტორში გადავაკოპიროთ. 00:06:13.757 --> 00:06:16.531 მუშაობს! ძალიან კარგი! 00:06:16.531 --> 00:06:24.901 საერთო თვისებები და ფუნქციები ამ ერთ ობიექტის ტიპში მოვაქციეთ 00:06:24.901 --> 00:06:28.207 და შევქმენით ამ საბაზისო ობიექტზე დაფუძნებული ორი ობიექტის ტიპი. 00:06:28.207 --> 00:06:30.981 ისინი გარკვეულ ფუნქციებს იღებენ, ზოგს კი თვითონ ამატებენ. 00:06:30.981 --> 00:06:36.339 ეს ძალიან მოსახერხებელია, რადგან საზიარო ფუნქციების შეცვლა ერთ ადგილას შეიძლება. 00:06:36.339 --> 00:06:40.302 ასაკის შეცვლა რომ გვინდოდეს, მივუწერდით "წლის". 00:06:40.302 --> 00:06:43.908 ახლა ყველას "წლის" აქვს მიწერილი ასაკთან. 00:06:43.908 --> 00:06:49.871 შეგვიძლია "ლაპარაკი" ფუნქცია "woo" ფუნქციით შევცვალოთ.. 00:06:49.871 --> 00:06:57.174 რადგან უკვე იხილეთ როგორ იქმნება ობიექტის ტიპები და როგორ მუშაობს მემკვიდრეობითობა, 00:06:57.174 --> 00:07:01.348 მოიფიქრეთ როგორ გამოდგება ეს თამაშების, ნახატების, ანიმაციებისთვის და ა.შ. 00:07:01.348 --> 00:07:05.257 მაგალითად, შეიძლება გქონდეს თამაში და ბევრი ტიპის პერსონაჟი, 00:07:05.257 --> 00:07:07.683 ყველას შეეძლოს სირბილი მაგრამ მოლოდ ზოგს - ახტომა. 00:07:07.683 --> 00:07:11.970 ეს მშვენიერი ადგილია ობიექტის ტიპებისა და მემკვიდრეობითობისთვის. 00:07:11.970 --> 00:07:15.970 ალბათ თქვენ კიდევ უამრავი გამოყენების მოფიქრებას შეძლებთ.