Урок 6. JavaScript. Объекты с Object.create. Что такое getters, setters

Поделиться
HTML-код
  • Опубликовано: 19 июн 2019
  • Получить профессию Frontend разработчика -
    bit.ly/3uUCgWD
    Подробнее узнать об обучении в Result School -
    bit.ly/39Z20qb
    Бесплатный курс HTML & CSS - bit.ly/3wAomt9
    Сделать 5 проектов на JavaScript - bit.ly/43ebXYl
    Я в соц сетях:
    Telegram: t.me/js_by_vladilen
    VK: vladilen.minin
    Instagram: / vladilen.minin
    Мои паблики по JavaScript:
    Telegram: t.me/result_school_it
    VK: result.school
    Instagram: / result.scho. .
    JavaScript cообщества:
    Discord: / discord
    Telegram: t.me/js_by_vladilen_chat
    Roadmap по каналу:
    vladilen.notion.site/Roadmap-...
    Урок 6. JavaScript. Объекты с Object.create. JS getters, setters
    В ролике я расскажу про гибкую настройку объектов в JavaScript.
    Вы узнаете про PropertyDescriptors, getters, setters и про цикл for in
    Так же поговорим про метод hasOwnProperty
    Сложный JavaScript простым языком:
    • Урок 1. JavaScript. Чт...

Комментарии • 264

  • @user-xt9cm9my7x
    @user-xt9cm9my7x 4 года назад +28

    Я так понимаю, что через несколько уроков у меня будут уже все данные на Владилена. В этом ролике вот год рождения получил, а там и до паспортных данных не далеко )
    Большое спасибо за уроки!

  • @romko-romario
    @romko-romario 3 года назад +46

    Очень понравилось видео! Но два важных уточнения :
    1) 13:28 Чтобы итерировать по собственным свойстам объекта, отсеивая свойства прототипа(-ов), не обязательно проверять внутри цикла, является ли свойство собственным, а можно воспользоваться встроенным методом Object.keys(), который возвращает итерируемый объект (а именно - массив) из собственных перичесляемых свойств объекта. Например:
    for(let i of Object.keys(person)) {
    console.log(i, person[i]);
    }
    2) 7:15 В случае если значения дескриптора writable равняется false, а configurable - true, значение ключа возможно не только удалять, но также и переназначать - правда, с помощью оператора "=" это действительно сделать невозможно, но зато возможно с помощью метода: Object.defineProperty(). Например: Object.defineProperty(person, 'name', {value: 'Maxim'}); или Object.defineProperty(person, 'name', {value: 'Maxim', writable: true, configurable: false}); // (результат этих двух строчек кода будет один и тот же, так как если значения дескрипторов не переназначать, сохраняются их прежние значения, а не дефолтные).

  • @SlavaSanin
    @SlavaSanin 4 года назад +148

    ЛУЧШИЙ ЛЕКТОР ПО ПРОГРАММИРОВАНИЮ В ИНТЕРНЕТЕ!!! СПАСИБО!!!!!

  • @s.konstantin
    @s.konstantin 5 лет назад +80

    Все понятно и доходчиво.
    Учусь во основном на твоих уроках!
    Нет воды, все по теме.
    Спасибо тебе за труд!

    • @VladilenMinin
      @VladilenMinin  5 лет назад +9

      🙏

    • @borik9125
      @borik9125 3 года назад +7

      Пытался прочесть в рифму, увы, тщетно )

    • @nuttyNat
      @nuttyNat 3 года назад +1

      @@borik9125 хокку жи

  • @user-gx7kf9um9x
    @user-gx7kf9um9x 4 года назад +5

    Чувак, очень круто, спасибо, быстро, понятно, очень ценно, поскольку не основы, а глубина! Спасибо!

  • @armanscription1428
    @armanscription1428 Год назад

    Очень полезные видео, действительно не каждый препод на ютубе говорит про эти темы, спасибо большое за твои старание!

  • @user-xd6bq6te4x
    @user-xd6bq6te4x 3 года назад +42

    Timecodes:
    0:52 - Object.create()
    3:14 - for...in
    4:32 - Property Descriptors
    8:10 - getters, setters

  • @user-cq7gz8ln9t
    @user-cq7gz8ln9t 3 года назад

    Самые лучшие лекции по JS. Спасибо!

  • @Vlad-em1bx
    @Vlad-em1bx 4 года назад +1

    Отличное объяснение!
    Спасибо Вам за труд!

  • @okyskaa
    @okyskaa 4 года назад +12

    Очень сложные темы доступно раскрыты, глубоко и в то же время максимально сжато. Спасибо большое. Смотрю по одной теме в день. Повторяю. Это обязательно поможет на собеседовании. Да и на проектах будет меньше конфуза.

  • @gentleman94
    @gentleman94 3 года назад

    Владилен, шикарно, спасибо огромное)
    такой пул информация в кратчайшее время, не мог не прокомментировать)

  • @user-ju7eg8vq1r
    @user-ju7eg8vq1r 3 года назад +1

    Очень полезный контент. Огромное Вам спасибо!

  • @lolashepota4050
    @lolashepota4050 3 года назад +2

    It is very understandable and useful content. Thank you very much!

  • @Kavrizhka
    @Kavrizhka Год назад

    Спасибо за полезную информацию!👍👍

  • @user-lv4dn6bc9l
    @user-lv4dn6bc9l 3 года назад +1

    Спасибо, очень полезный контент!!

  • @mrMarseleene
    @mrMarseleene 3 года назад +1

    охеренные уроки, спасибо! В связке с документацией и learn.javascript особенно круто заходит

  • @lumeaceaiuluisrl6343
    @lumeaceaiuluisrl6343 3 года назад

    Спасибо! Как всегда, супер!)

  • @GordonBreazz
    @GordonBreazz 5 лет назад

    Отличный урок, спасибо

  • @Pr0xytube
    @Pr0xytube 5 лет назад

    Спасибо за хорошие уроки)

  • @SvetaSveta-ms4hi
    @SvetaSveta-ms4hi 4 года назад +1

    Спасибо Вам огромнейшее!!!

  • @Ziraman13
    @Ziraman13 4 года назад +3

    спасибо за науку и пусть тебе твое учительство принесло больше пользы ))

  • @owl5456
    @owl5456 Год назад +1

    спасибо большое Владилен Минин

  • @nataliavardazaryan3981
    @nataliavardazaryan3981 2 года назад

    Спасибо тебе за труд!

  • @ondrui
    @ondrui 3 года назад

    спасибо за классный урок!

  • @user-bs2nq5kk4x
    @user-bs2nq5kk4x 4 года назад

    Очень полезный материал. Уже придумал много кейсов, где можно использовать это в проектах.

  • @oleggribkov238
    @oleggribkov238 3 года назад

    Очень все доступно и понятно)

  • @izograph
    @izograph 3 года назад

    Класс!!! Мощный инструмент! Обычные классы с приватами и пабликами курят в сторонке ))

  • @antonb6831
    @antonb6831 4 года назад +19

    Спасибо, хорошее объяснение. Оказывается, геттеры и сеттеры это не так страшно)

    • @izograph
      @izograph 3 года назад

      да еще и полезно!

  • @web4453
    @web4453 2 года назад

    БУМ. Совершенно для меня новая информация, как будто апнул левел. Никогда даже представить не мог, что свойствами объекта можно манипулировать и что у свойств есть свои свойства :D

  • @isagidaiki
    @isagidaiki 11 месяцев назад

    Очень понравилось видео!

  • @user-jq7sk2zo6c
    @user-jq7sk2zo6c 3 года назад

    Отличное видео👍

  • @billlanc9461
    @billlanc9461 6 месяцев назад

    Четкое пояснение

  • @user-qg1wi9ce8r
    @user-qg1wi9ce8r 4 года назад +6

    Всем все понятно и доходчиво в комментариях ),а я один походу
    все уроки по 4 раза пересматриваю и практикуюсь, что бы уловить суть?
    Владилен спасибо за уроки и курсы на юдеми :)

    • @mediontamginskii5889
      @mediontamginskii5889 4 года назад +4

      Не ты один такой) Мне вот тоже приходится по паре раз пересматривать, читать, гуглить другие видео смотреть!

    • @serjsamoilow8711
      @serjsamoilow8711 4 года назад +1

      я тоже нифига не вкуриваю с первого раза. для себя решил что буду просто хавать всю инфу подряд (и обязательно записывать все, что действительно важно, а очень важные моменты держу всегда под рукой). а потом на практите все подтяну. я так хтмл и цсс учил, прочитал 3 книги, вроде все понял, а перешел к практике и впал в ступор. в итоге пока сам не написал несколько сайтов - не разобрался, но база, которую получил из книг в виде общей теории - очень сильно помогла. надеюсь так же изучить js. вообще трудно что-либо изучать, когда не понимаешь, где это использовать на практике. например я понятия не имею, как мне на практике пригодится object create, если я могу использовать обычное создание объектов через object = {}, и оно сможет решать мои потенциальные задачи, но перейдя к практике, уверен, найду применению этого урока.
      p.s.: хотел поделиться методом своего обучения. если кто дочитал до конца - поделитесь плз как учитесь вы.

  • @Russian-Stalinist
    @Russian-Stalinist Год назад

    Полезный урок!

  • @VladilenMinin
    @VladilenMinin  5 лет назад +170

    Все понятно, двигаемся дальше?)

    • @mysteriousxcodesterio4434
      @mysteriousxcodesterio4434 5 лет назад +15

      Владилен Минин
      ,
      Пожалуйста, делайте по больше обучающего контента, это очень важно для нас не останавливайтесь ведь вы делаете благое дело, для тех кому очень важно!!!! Программирование и данное направление, спасибо вам большое!

    • @nikdanik
      @nikdanik 5 лет назад +3

      Владилен, спасибо вам за уроки. Хотел бы узнать, как часто в боевых проектах используется get и set и в каких приблизительно случаях. Спасибо

    • @NextgenSocialReptile
      @NextgenSocialReptile 5 лет назад +1

      MysteriousXcode Sterio и так почти каждый день ролики, это тяжело)

    • @NextgenSocialReptile
      @NextgenSocialReptile 5 лет назад

      E1EMENT лично я не очень часто этим пользовался, но зависит от проекта

    • @hellicobacterpillory6677
      @hellicobacterpillory6677 5 лет назад +5

      Русскоязычные уроки js ограничиваются в своем большинстве основами, более глубокий материал, какой подаёте вы - редкость и на вес золота, успехов вам в карьере и моя благодарность за старания для нас !)

  • @alexfender88
    @alexfender88 3 года назад

    Намного понятнее стало!

  • @user-fn2pi6xz8f
    @user-fn2pi6xz8f 3 года назад

    Очень полезно!

  • @vanya_hrynkiv
    @vanya_hrynkiv 4 года назад +1

    Все стало понятно

  • @blind_ron1n
    @blind_ron1n 3 года назад

    Полезно!

  • @BilliK1000
    @BilliK1000 4 года назад

    Thank you!!!! it is very useful!!!

  • @user-ml8hn5kg9e
    @user-ml8hn5kg9e 2 года назад

    Привет Владилен у нас в Компании учат по твоим Видео))) Хороший уровень видео!!!

  • @pavloskuibida6292
    @pavloskuibida6292 3 года назад

    Спасибо тебе!

  • @user-ff1fc7iz9j
    @user-ff1fc7iz9j 3 года назад

    Спасибо! ❤😊

  • @davarmghazaryan580
    @davarmghazaryan580 8 месяцев назад

    Супер канал

  • @armanilyassov3682
    @armanilyassov3682 4 года назад

    Super! 👍🏻

  • @LEG1ONER
    @LEG1ONER Год назад

    Спасибо!

  • @dimalukashenko4865
    @dimalukashenko4865 Год назад

    Хорошее видео

  • @Vitaliy-ct2wv
    @Vitaliy-ct2wv 4 года назад

    супер, летим в космос =)

    • @gubatenkov
      @gubatenkov 4 года назад

      тебя димыч подослал?))

  • @user-ru8qb9ze1d
    @user-ru8qb9ze1d 4 года назад

    Ахахахах) просто безумие)) возможностей после урока миллиард, да это же почти модификаторы доступа)) теперь после урока про прототипы можно запросто свои интерфейсы пилять)) хотя конечно с нынешними фреймворками дело не совсем нужное) спасибо за лекцию))

  • @bohdan.petrov
    @bohdan.petrov 4 года назад +6

    Лучше использовать Object.create или функции конструкторы? Пока не уловил преимущества и недостатки каждого из способов.
    Что используется чаще на практике?

  • @komilolimov2257
    @komilolimov2257 Год назад +1

    Четко

  • @artemijeka
    @artemijeka 2 года назад

    Спасибо

  • @alibekn6449
    @alibekn6449 2 года назад

    спасибо

  • @vladimirrabtsun
    @vladimirrabtsun 5 лет назад +3

    Про ImmutableJs посмотреть бы

  • @nareksargsyan9581
    @nareksargsyan9581 3 года назад

    super video

  • @mihrankhachatryan3693
    @mihrankhachatryan3693 3 года назад

    А у нас лектора несут какую то дичь из 80-ых)).Красава братан, лукас от душы)

  • @robert33318
    @robert33318 2 года назад

    Klasssss !!!

  • @user-py7nm1mu2b
    @user-py7nm1mu2b 5 лет назад +6

    Не знал кстати, что можно так тонко настраивать объекты при их создании, думал так можно делать только через Object.defineProperties :-) спасибки
    будешь рассматривать в дальнейшем Object.defineProperties, Object.defineProperty и остальные интересные операции с объектами?

    • @VladilenMinin
      @VladilenMinin  5 лет назад +3

      Эти методы уже не буду, потому что я дал достаточно знаний, чтобы прогуглить эти методы и понять как они работают)

  • @user-gu5ir3zs4v
    @user-gu5ir3zs4v 5 лет назад

    Очень жду Proxy и классы

  • @nikitaershov5005
    @nikitaershov5005 Год назад

    красава

  • @ticheroi
    @ticheroi 4 года назад

    спасибо большое за ваш труд, есть замечание
    не всё в js объект: строки, числа и прочие примитивы не объекты, когда вы обращаетесь к свойству/методу примитива интерпретатор js создает временный объект обертку для соответствующего примитива, в которой хранятся методы и свойства
    высказывание "всё в ${имя ЯП} объект" это скорее про пайтон

  • @xalinanton
    @xalinanton 5 лет назад +5

    Жду Proxy :D

  • @user-os7xv8em1s
    @user-os7xv8em1s 3 года назад

    А можно ли налету программно менять значение свойств, ну скажем writable: true на writable: false (и всех других тоже) или надо переопределять весь объект заново?

  • @mukhammadrustambayev2051
    @mukhammadrustambayev2051 5 лет назад +2

    жду от вас уроки про vue-class-component, vue-property-decorator

    • @VladilenMinin
      @VladilenMinin  5 лет назад +1

      Да, вероятно они будут

  • @batradzbazzaev
    @batradzbazzaev 3 года назад +22

    Владилен, подскажи, в каких случаях в работе нам удобно использовать именно такую инициализацию объекта, и использовать геттеры и сеттеры?

    • @artemijeka
      @artemijeka 2 года назад +1

      отвечу за него, скорее всего где нужна тонкая настройка свойств и методов, перебираемость, изменяемость, удаляемость

    • @sadykov5671
      @sadykov5671 2 года назад +2

      В ООП / инкапсуляция

  • @werus4291
    @werus4291 4 года назад

    super

  • @michaelson9137
    @michaelson9137 4 года назад +29

    Спасибо за доступное и понятное объяснение. Единственное что я так и не могу представить, где можно данный способ использовать. Подскажите конкретный пример плз))

    • @dmitryulanov9395
      @dmitryulanov9395 3 года назад

      Применения объекта применяется всюду. В основном в них хранят данные и используют. Чтобы было понятнее, посмотри для чего используют объекты на ютубе. На практике

    • @besizzo
      @besizzo 2 года назад +8

      @@dmitryulanov9395 Уверен, Миша спрашивал, в каких случаях не просто используют объекты, а именно объекты созданные при помощи Object.create

  • @skily4866
    @skily4866 3 года назад +3

    Немного не понял смысла сеттера, если его использовать то значение поля не изменится, а прописать writable: true сеттеру нельзя

  • @johnstrayk5208
    @johnstrayk5208 4 года назад

    Как Боженька все разжевал.

  • @mohmadnavruzov3867
    @mohmadnavruzov3867 Месяц назад

    не особо понял но очень интересно 👍

  • @stolz999
    @stolz999 4 года назад +17

    Ппц. В 1993 я школу закончил. В институт поступил. Теперь сижу, подтягиваю JavaScript...

    • @Alex-rs1tt
      @Alex-rs1tt 3 года назад +2

      И я) 1976 г.р.

    • @olegsoul6016
      @olegsoul6016 3 года назад +2

      Ха) Я вообще 1973 г.р.)) И тоже учу JS)

    • @vana__f7570
      @vana__f7570 3 года назад

      я из 2005 и учу js

    • @kaltsdaniil8378
      @kaltsdaniil8378 3 года назад

      @@vana__f7570 я родился в 2006)

    • @talivel118
      @talivel118 2 года назад

      @@kaltsdaniil8378 Я родился в 2006;)

  • @user-bx7ly2th3b
    @user-bx7ly2th3b 4 года назад +3

    Отличное объяснение! Не понятен только 1 момент из всего: как нам через сеттер сделать то, для чего, собственно, он служит: задать значение переменной? Если там объявить this.age = value - он завернется в loop

    • @Furamy
      @Furamy 4 года назад +1

      Вроде как напрямую нельзя, но можно менять значения у которых writable: true и от которых образуется значение для age с помощью get, в данном случае поставить для поля birthYear writable:true и менять его в set у поля age
      set(value) {
      this.birthYear = new Date().getFullYear() - value;
      }

    • @user-bx7ly2th3b
      @user-bx7ly2th3b 4 года назад

      @@Furamy ну, наверное как-то таак, да....других вариантов вроде не видно)

  • @AGM140580
    @AGM140580 2 года назад

    Очень хорошее объяснение, но не для новичков.

  • @oleksandrharkusha9404
    @oleksandrharkusha9404 4 года назад +4

    Спасибо за полезеную и понятно изложеную информацию. Но большая просьба ты в многих видео говоришь что практика и только практика закрепит хорошое понимание языка так вот просьба давай хоть какое-то задание пусть даже обсурдное

  • @vasiliy_konnov
    @vasiliy_konnov 4 года назад

    как правильно используют эти два параметра в функции object.create({},{})
    Пока что мне пришло в голову только то, что во втором параметре мы пишем логику, вычисления, проверки, а в первом описываем например вывод шаблонов (кусков html с динамически изменяемой информацией)
    но я не уверен в своих догадках

  • @user-dn1sy6mb7i
    @user-dn1sy6mb7i 2 года назад

    👍👍

  • @mad0k
    @mad0k 5 лет назад +1

    сделай уроки по ImmutableJs

  • @alexfender88
    @alexfender88 3 года назад +2

    А почему мы метод calculateAge положили в прототип а не в сам объект? какой в этом смысл глобальный?

  • @user-wv7tx4mb6d
    @user-wv7tx4mb6d 4 года назад

    Для продвижения ролика)))

  • @phpdevelopercode636
    @phpdevelopercode636 3 года назад +1

    Откуда вы берете эти знания? Смотрел на mdn по object.create, но там про дополнительные поля writable и прочие нечего не написано, есть только пример, но что они делают не написано

  • @ivanvano8571
    @ivanvano8571 3 года назад

    Привет Владилен, очень круто исложено!!! а откуда брать інфу про єти дискриптори?

    • @eeee4re
      @eeee4re 3 года назад

      JavaScript работает на стандарте ECMAScript. Ответ на ваш вопрос находтися тут tc39.es/ecma262/#sec-object-type

  • @vasiliy_konnov
    @vasiliy_konnov 4 года назад +4

    А в get() - мы не принимаем параметр? не совсем понятно как на практике использовать его. Можно какой то пример?

    • @VladilenMinin
      @VladilenMinin  4 года назад +2

      Не принимаем. Например валидация или трансформация
      Пример в уроке

  • @vladimirrabtsun
    @vladimirrabtsun 5 лет назад

    Крута

  • @novichok3417
    @novichok3417 8 месяцев назад

    Ваше объяснение темы сеттеров и геттеров третье по счёту и все объясняют только часть. Сколько ещё видосов надо посмотреть, чтобы полностью изучить эту тему?

  • @m.movsar
    @m.movsar 3 года назад +1

    Друзья, советую купить курсы Владилена на Udemy.

  • @cyclopentanpergidrophenantren
    @cyclopentanpergidrophenantren 4 года назад +2

    судьба object create после появления классов class Object, где внутри можно поместить и свойства и методы, учитывая отсутствие таких модификаторов в классе, как privet, protected - необходимость set, get весьма сомнительная.

  • @Mr.manpasserby
    @Mr.manpasserby Год назад

    Шпаргалка
    14:00 юзать метод объекта hasOwnProperty(), когда используется цикл for (let ... in ...)

  • @justaman834
    @justaman834 4 года назад

    так и не понял зачем в age get() если можно просто переменную завести с таким значением или функцию, да и set такая же шляпа, можно же в объекте отдельный метод какой-то сделать который будет что-либо считать или проверять, что я не так понял?)

  • @egrpavlov2694
    @egrpavlov2694 4 года назад

    Данный синтаксис : объявление getter и setter внутри дескриптора свойства не работает (геттеры и сеттеры просят указать название) . Объясните что не так

  • @user-vd6eg5ke7i
    @user-vd6eg5ke7i 3 года назад

    Что за модуль который скобки автоматически переносит?

  • @-it-kidys
    @-it-kidys 5 лет назад +1

    Спасибо за урок! Не знал даже не догадывался о таком создании объектов в JS.. А где в реальной практике это может быть полезно? Это и есть полная реализация инкапсулированных свойств объекта

    • @VladilenMinin
      @VladilenMinin  5 лет назад +1

      Реализация реактивности в фреймворках например
      Vue раньше на этом целиком был построен

    • @-it-kidys
      @-it-kidys 4 года назад

      @@VladilenMinin а реакт нет?

    • @VladilenMinin
      @VladilenMinin  4 года назад

      @@-it-kidys Про реакт не помню, но вроде у них другой механизм

    • @romankonkin4365
      @romankonkin4365 4 года назад

      @@VladilenMinin Во Vue и сейчас вся реактивность на Object.defineProperty() :) Или ты имеешь ввиду, что там раньше было именно через Object.create()? Вот про это я не вкурсе.
      В 3-ем должна быть реализация реактивности уже на Proxy.

  • @artemkirkhmaier484
    @artemkirkhmaier484 2 года назад +2

    Так и не понял в чём разница между get и set

  • @user-nl6uj2dt2o
    @user-nl6uj2dt2o 3 года назад

    комментарий для продвижения)

  • @user-sp3pr9uh7v
    @user-sp3pr9uh7v 2 года назад

    слушайте, я тут подумал, а может быть комбинирований об*ект?
    Вот что я имею ввиду:
    name: {
    value: 'Dmytro',
    enumerable: true,
    writable:true,
    configurable: true
    },
    birthYear: {
    value: 2004,
    enumerable: true
    },
    age: {
    get() {
    return new Date().getFullYear() - this.birthYear
    },
    set(value) {
    document.body.style.background = '#f0f0f0'
    console.log('Set age', value)
    }
    },
    work:'Programer'
    как-то так я просто в конце описания об*екта написал work:'Programer' как мы писали раньше

  • @DanReksar
    @DanReksar 5 лет назад

    Почему в set() нужно обращаться к document а не к window?

  • @thedeviljoy6374
    @thedeviljoy6374 3 года назад

    комментарий из нескольких слов для пуша видоса

  • @user-qh4zv9qc9h
    @user-qh4zv9qc9h 2 года назад

    Круто с примерами, но не понятно зачем нужны get и set? какой смысл, если всё это можно обычными методами сделать. Не понял задумки магов JS.

  • @temeralin.t
    @temeralin.t 3 года назад

    для продвижения канала

  • @user-ng1qt1mi4o
    @user-ng1qt1mi4o 4 года назад +1

    Почему после того, как ты внутри for..in написал hasOwnProperty не вывелись свойства age и birthDate?
    Ты же их не в первом объекте создавал

    • @VladilenMinin
      @VladilenMinin  4 года назад +1

      Потому что по умолчанию enumerable = false

  • @Chernoby_Music
    @Chernoby_Music 4 года назад

    Можешь показать создание сайта на реакте? простого, но с админкой

    • @VladilenMinin
      @VladilenMinin  4 года назад

      На канале курс по мерн