Продвинутый javascript 3 - Прототипное наследование

  Рет қаралды 41,629

loftblog

loftblog

Күн бұрын

Пройди БЕСПЛАТНО профориентацию в IT - bit.ly/2NLILne
В этом видео мы наконец познаем саму тайну тайн javascript, а именно:
что же такое прототип?
что такое наследование?
что такое прототипное наследование?
и самое главное - как им пользоваться?
Смотри курс "Gulp.js" : • Gulp.js
Смотри курс "Backbone.js" : • Backbone.js
Школа онлайн-образования: loftschool.com/
Telegram: telegram.me/lo...
Slack: slack.loftblog.ru/
Сайт: loftblog.ru/
Instagram: / loftblog
Группа вконтакте: loftblog
Facebook: / loftblog
Twitter: / loft_blog
Больше уроков от lofblog: #loftblog
Все уроки по хештегу: #loftblogJS
Полезные уроки для веб-программиста: #вебпрограммист
#javascript
Поставь лайк - смотивируй автора писать еще :)

Пікірлер: 66
@alekseib5887
@alekseib5887 10 жыл бұрын
Самый главный вопрос не раскрыт - когда нужно использовать наследование? Везде пишут про зверей, людей, и про другие сущности, но про то, где конкретно его (наследование) можно применить в web разработке не встречал. Этот урок был бы в сто раз полезнее если бы вы на практике показали что для такой-то задачи нужно использовать наследование, а для такой-то в нём нет необходимости.
@AbraKadabra000
@AbraKadabra000 10 жыл бұрын
если ваши объекты созданные с помощью new имеют огромное число тяжёлых публичных методов, то лучшим решением будет поместить эти методы в прототип. Это сэкономит память при создании миллиона объектов. Т.к. у всех объектов будет всего лишь один общий объект с методами. Если не помещать методы в прототип то у каждого нового созданного объекта будут копии одних и тех же методов, а это плохо скажется на памяти, если мы создадим много таких объектов пригодиться этот приём может например при создании функций которые вы потом отдадите на юзание многим пользователям.. Чтобы у них не возникало проблем с памятью если они захотят сделать 9999 зверей
@viktorsoroka4510
@viktorsoroka4510 9 жыл бұрын
это шаблон, который спасает от копипаста по сути когда имеем дело с коллекцией однообразных объектов
@lmaq8352
@lmaq8352 7 жыл бұрын
очень нужно)
@leoniddashko9960
@leoniddashko9960 7 жыл бұрын
Victor, хорошо подметили, это как раз реальный кейс. Скажется на производительности, если работаете с большой коллекцией объектов.
@Selicium
@Selicium 5 жыл бұрын
Приятно, когда на протяжении всего видео, все понятно. Единственно есть нюанс на всех курсах JS - звук, школьник на телефон лучше звук запишет )). В остальном все гуд!
@Viktoroffs
@Viktoroffs 7 жыл бұрын
Просмотрел урок первый раз - ничего не понял. Пересмотрел кучу других видосов на ютубе, потом вернулся к этому уроку и все встало на свои места.
@denli6010
@denli6010 8 жыл бұрын
СПАСИБО!!!! С ПРОТОТИПАМИ МНЕ НА МНОГО БОЛЬШЕ ПРОЯСНИЛОСЬ ИМЕННО ПОСЛЕ ВАШЕГО УРОКА!
@evgenykrivosheev3220
@evgenykrivosheev3220 10 жыл бұрын
Благодарю за уроки! Вы очень доступно излагаете материал.
@AbraKadabra000
@AbraKadabra000 10 жыл бұрын
цель урока - запутать поизящней.
@kristinaazizova973
@kristinaazizova973 6 жыл бұрын
интерестная тема, не зря подалась во фронтенщики)) спасибо LoftBlog. А у нашей "чики" это супер)))
@ВладимирНетот
@ВладимирНетот 5 жыл бұрын
На 21:06 на строке 51 и 52 почему вы в прототип передаете переменную wolfy, а не сам Wolf? Так нельзя? А еще, почему то что на 47 строке нельзя было сразу записать на 36 через this? Буду очень благодарен за ответы
@viktorsoroka4510
@viktorsoroka4510 9 жыл бұрын
Хороший урок - хоть и ранее знал об особенностях оператора new, но делал это как-то инструкции, а момент с this.__proto__ = Foo.prototype окончательно поставил все на свои места.
@XaMJIo123
@XaMJIo123 8 жыл бұрын
Так и не понял почему волки начали кукарекать. Единственная догадка - это что присваивая новый метод для Chiken.prototype залезли в обьект энимал, а вот как добавить метод в функцию-конструктор - так и осталось загадкой. Разве что создать новую функцию с методом и добавить еще 1 уровень наследования уже от обьекта сhickу. И что бы все новые курецы кукарекали - уже создавать их как экземпляры от новой функции
@alexarkaimov9561
@alexarkaimov9561 10 жыл бұрын
Долгожданная штуковина)) заценим))
@valeryshusharin8391
@valeryshusharin8391 10 жыл бұрын
Волки закукарекали! :-D
@dx1MS
@dx1MS 10 жыл бұрын
а какого х.. они закукарекали? Мне кажется нужны пояснения.
@valeryshusharin8391
@valeryshusharin8391 10 жыл бұрын
Артем Бусел Для тех, кто смотрит и не видит - 23:33
@aliaksandrk3338
@aliaksandrk3338 9 жыл бұрын
Артем Бусел Chicken.prototype = animal; // --> Chicken.prototype = animal; Chicken.prototype.something = 5; // --> Chicken.prototype.animal.something = 5
@alexbel3021
@alexbel3021 9 жыл бұрын
+Артем Бусел, потому что метод Kurareku добавляется к Chicken.prototype. А что есть Chicken.prototype? Правильно, animal. Однако и Wolf.prototype также равно animal. Следовательно, все объекты, созданные с помощью конструктора Wolf, наследуют от своего прототипа (animal) новое свойство Kurareku. Дабы избежать казуса, можно создать промежуточные функции: var wolfy, chicky, Animal = function () { this.type = "animal"; }, AnimalWolf = function () { this.name = "wolf"; }, AnimalChicken = function () { this.name = "chicken"; }, Wolf = function () { return this; }, Chicken = function () { return this; }; AnimalWolf.prototype = AnimalChicken.prototype = new Animal; Wolf.prototype = new AnimalWolf; Chicken.prototype = new AnimalChicken; wolfy = new Wolf; chicky = new Chicken; Chicken.prototype.bird = true; document.writeln( wolfy.bird ); //undefined document.writeln( chicky.bird ); //true
@BearVodkaAndValenki
@BearVodkaAndValenki 9 жыл бұрын
+Alex Bel спасибо, что разъяснил, а то до меня тоже сначала не дошло почему "волки закукарекали".)))
@СергейКомбаров-д1ж
@СергейКомбаров-д1ж 10 жыл бұрын
больше JS!!! Спасибо, все четко)
@mackaybravo6770
@mackaybravo6770 10 жыл бұрын
спасибо! Долго ждал
@artemtravlo3135
@artemtravlo3135 9 жыл бұрын
У меня почему то после того как установил прототип - то не показывает "ключ-значение" прототипа в обьекте. Но в свойстве _proto_ - есть этот унаследованный обьект со свойствами(( wolf {name: "Волк"} name: "Волк "__proto__: Object canRun: true __proto__: Object
@Peter-vz4tb
@Peter-vz4tb 9 жыл бұрын
У меня тоже
@АндрейУсков-х1т
@АндрейУсков-х1т 7 жыл бұрын
та же фишка. Хотя, если в консоли прописать wolfy.canRun , то на экране вижу значение
@СтаниславЖуковский-и7е
@СтаниславЖуковский-и7е 7 жыл бұрын
с момента выхода видео прошло 2 года, браузеры просто изменили отображение на более правильное, но не уверен, тоже самое у меня
@Viktoroffs
@Viktoroffs 7 жыл бұрын
у меня так же
@volodymyrzaiets8388
@volodymyrzaiets8388 10 жыл бұрын
очень много не правильно называл вещи. в самом начале ты присвоил переменной boo = new Foo(); и сказал что boo отнаследовало... какое тут было наследование если ты просто присвоил обьект созданый функцие конструктором... Наследование это когда один класс наследует свойства и методы от другого класса (родительского)
@AbraKadabra000
@AbraKadabra000 10 жыл бұрын
наследование это когда объект наследует св-ва прототипа, при условии что в самом объекте нет одноимённых св-ств
@Nopefish
@Nopefish 7 жыл бұрын
Одноименные свойства не много меняют. Если удалить такое свойство из объекта, объект берет его из прототипа.
@novichok3417
@novichok3417 11 ай бұрын
Строка boo = new Foo() означает, что переменная boo вызвала функцию конструктор которая создала новый объект и поместила его в переменную boo и этот новый объект унаследовал свойства конструктора Foo.
@mackaybravo6770
@mackaybravo6770 10 жыл бұрын
написал много своего, вроде понятно когда писал код, но легко запутаться. Но думаю если попрактиковаться, то все будет ок
@ДмитрийВалуев-ф8ф
@ДмитрийВалуев-ф8ф 10 жыл бұрын
А как конструктор наследует свойства объекта? Получается помимо this.__proro__ = foo.prototype, он получает еще одно свойство __proto__
@barrettM8
@barrettM8 9 жыл бұрын
JS не перестаёт меня удивлять ) Почему, если добавить объект через прототип к конструктору, затем добавить еще один метод к этому же конструктору (опять же через прототип) всё нормально работает. Но если к этому же конструктору добавить новый объект, то все предыдущие, унаследованые методы и свойства затираются ))
@meditarium_vibes
@meditarium_vibes 8 жыл бұрын
+b4rret конечно, ты же переписывает объект по его адресу в памяти, а вот если ты сделаешь так: Some.prototype[prop] = obj[prop] зафигачив циклом в этот объект данные из другого, то ты просто добавишь(перезапишешь) свойства в объект по уже существующему адресу и всё будет ок :)
@F0RIS
@F0RIS 10 жыл бұрын
Какой-то неудобный синтаксис наследования в js)
@TheKirk1989
@TheKirk1989 6 жыл бұрын
ЗНАТОКИ, к вам вопрос ! ! ! Все рассматривают стандартное присвоение свойств name, age, number новым объектам с помощью функций конструкторов.... , меня интересует, как правильно написать код, чтобы в каждом новом созданном мною, помимо простых (к примеру) свойств name age и.т.д в объекте отображалось рандомное число от 1 до 10: короче, посмотрите на мой код и подскажите, что я не так делаю... function lol(name, random){ this.name = name this.random = 1+Math.floor(10*Math.random()); // Вижу, что здесь что-то ну прям категорически не правильно, но не знаю как написать правильно } var A = new lol("Виталик") // И как мне присвоить значение объекту, если это рандомное значение? var B = new lol("Adam") var C = new lol("Алёша") function alt( obj ){ for( var s in obj ){ document.write( s + ">>>" + obj[s] + "" ) } } alt(A) alt(B) alt(C) alert(" Благодарю заранее, не судите строго ;)" )
@TheKirk1989
@TheKirk1989 6 жыл бұрын
Хах, оказывается код был правельным, всем спасибо!
@volodymyrzaiets8388
@volodymyrzaiets8388 10 жыл бұрын
и вообще я конечно все понимаю но это не наследование как такое, к классическом паттерне наследование реализуется с помощу создания промежуточной функции конструктора, и суть такова что конструктор класса создает новый обьект который имеет доступ через прототипную ссылку к свойством родительского класса, в функциональном паттерне это реализуется функцией которую во многих библитеках включая jquery называют extend - функция которая копирует все свойства и методы родителя и добавляет ребенку. Очень смутило это видео, когда то смотрел твои другие видео и подчерпывал для себя новое, а это видео вводит людей в заблуждение
@chernobaev
@chernobaev 10 жыл бұрын
Вообще то, тут про это и рассказывается, а в следующем уроке будет про extend и object.create()
@СергейГуменюк-б1ь
@СергейГуменюк-б1ь 6 жыл бұрын
Урок хороший, мне понравился, но ты что под конец уже засыпать начал? что-то бормочешь и очень тихо и невнятно говоришь, и еще понравилось наблюдать за часами справа сверху)
@ivansofronov4773
@ivansofronov4773 8 жыл бұрын
все волки закукарекали ваще прикольно не запктано!
@ИльшатГайфуллин
@ИльшатГайфуллин 9 жыл бұрын
Что-то как то запутано...
@highfivebear
@highfivebear 8 жыл бұрын
черт возьми, получается, что когда создаем объект через new, он наследует свойства, как и prototype? черт черт черт.кто сможет объяснить, в чем разница назначать свойства через prototype, где все экземпляры эти свойства будут наследовать, и дописать это самое свойство в нашу функцию-конструктор, где также все экземпляры смогут унаследовать?
@Павел-ы9ф2п
@Павел-ы9ф2п 8 жыл бұрын
Это объясняется в предыдущем уроке. Да, методы функции-конструктору можно присваивать по-разному: - Внутри функции-конструктора - Через prototype Основные отличия: - Метод, описанный через prototype, не имеет доступа к приватным переменным внутри конструктора (однако это можно обойти с помощью обертки-геттера) - Метод, описанный через prototype, гораздо производительнее
@KievMan777
@KievMan777 8 жыл бұрын
да, после изучения фреймворка KinetikJS /Konva.js , влез в структуру, и понял для чего так часто обращения через prototype чего только стоит короткое объявление и потом куча кода в prototype Kinetic.Canvas = function(config) { this.init(config); }; Kinetic.Canvas.prototype = {... lalala ...
@stylenova1
@stylenova1 5 жыл бұрын
Заметил не совпадения на сегодняшний день, с чем это связно ? Если в Foo закомментить name, то он не наследует как на видео, увидеть name, можно только через boo3.__proto__ , при вызове просто boo3 вот как сейчас joxi.ru/82Q5OVoTwdgeq2
@stylenova1
@stylenova1 5 жыл бұрын
Получается то что сказано на 17 мин, на 20 строке, же не работает.
@ArtemkaRocks
@ArtemkaRocks 9 жыл бұрын
пожалуйста, не пугайте меня вашими вставками заставок .... спс.
@bekliev
@bekliev 9 жыл бұрын
Artem Petrenko, loftblog было бы отлично, если музыку (мелодию) заставки подкорректировали. Кажется так, будто вообще ритма нет, как-будто одну и ту же звуковую дорожку продублировали, только дубль запустили на пол секунды позже основной дорожки. Вообще плохо звучит. Когда первый раз услышал, подумал, что у меня динамики испортились.
@arsenykonohov4426
@arsenykonohov4426 9 жыл бұрын
а вот вам для усвоения материала скриншот, который ставит на места некоторые слова прозвучавшие с экрана. yadi.sk/i/8_2hgpHrjjAgD Версия 2.0 для тех кто в танке))) типа как я) yadi.sk/i/2YNhr98wjjAjA
@client-y4f
@client-y4f 8 жыл бұрын
+Arseny Konohov Спасибо, ахах)
@ВячеславКоростин-у2ч
@ВячеславКоростин-у2ч 7 жыл бұрын
маловато что понятно ...
@Понамарев-м5т
@Понамарев-м5т 7 жыл бұрын
Наследуются классы а не объекты!
@Nopefish
@Nopefish 7 жыл бұрын
Не совсем корректное объяснение. Волки кукарекать стали, это видно в консоли хрома, при этом автор никакого внимания на это не обратил. Плохо.
@ivansofronov4773
@ivansofronov4773 8 жыл бұрын
не запутано*
@sashabondar6074
@sashabondar6074 7 жыл бұрын
Бессмысленный урок, который всех только запутывает. Лофт все больше и больше расстраивает.
@vitalysvyatyuk4299
@vitalysvyatyuk4299 8 жыл бұрын
Тягомотина, скукотища, не теряйте время. Смотрите на англ. языке - там всё за 3 минуты объясняется.
@MODIK
@MODIK 8 жыл бұрын
можешь ссылку дать,что посмотреть?
And what’s your height? 😁 @karina-kola
00:10
Andrey Grechka
Рет қаралды 52 МЛН
New Colour Match Puzzle Challenge - Incredibox Sprunki
00:23
Music Playground
Рет қаралды 44 МЛН
Основы Javascript 10 - Массивы
22:19
loftblog
Рет қаралды 41 М.
What is __proto__ ? | Javascript Prototypes Tutorial
23:11
Dave Gray
Рет қаралды 46 М.
как тебе будут продавать в 2025
16:22
Тихон Смирнов
Рет қаралды 484 М.
Docker Для Начинающих за 1 Час | Docker с Нуля
52:43
Основы Javascript 12 - Функции
31:29
loftblog
Рет қаралды 61 М.
And what’s your height? 😁 @karina-kola
00:10
Andrey Grechka
Рет қаралды 52 МЛН