Читаю сейчас Флэнэгана, сейчас начинается глава книги о Клиентском JS, но перед ней я хотел бы закрепить знания объектов(понимание)
Если ли какой либо дельный ресурс, который доступно объясняет все хитросплетения объектов в JS?
Спасибо
Nikita Schipilov: объект, это обычная структура данных состоящая из пар ключ-значение, где в роле ключа всегда выступает срока, а в качестве значения может быть все что угодно. Объект ничем не отличается от пакета из магазина в который Вы складываете покупки.
Объект-конструктор можно рассматривать как спортивную сумку с отделением для объектов this и отделением для prototype.
copal: вот только с таким объяснением у людей нет понимания зачем вообще объекты нужны если были структуры.
Объект - это некая штука которая что-то делает. И вся суть сделать так что бы нам было пофигу КАК оно это делает. А когда мы рассматриваем объект изнутри, и он не наш (то есть мы сейчас вообще другой объект рассматриваем а это просто зависимость), то что-то явно пошло не так в плане инкапсуляции.
Типичный пример - геттеры и сеттеры у объектов. Вроде бы все клево, напрямую данные наружу не ходят. Но допустим у нас был объект "деньги" и мы хранили там денежку в float (для js это не проблема конечно, я больше для примера), а потом до нас дошло что так лучше не делать и мы хотим переделать float в int, но наш геттер все еще возвращает float. И мы не можем это поменять потому что наш геттер использует код, который мы не контролируем.
Альтернатива - для любых операций которые нужны приложению предоставить метод, не предоставляющий информации о внутреннем устройстве и как объект хранит данные. То есть вместо
if (a.price > b.price) {
можно написать
if (a.hasLowerPriceThan(b)) {
это и читается лучше, и контролю большему поддается. Есть куча нюансов конечно которые нужно учитывать... но основной посыл - инкапсуляция и изоляция возможных изменений.
Nikita Schipilov: да нет, не трудно. Вам нужно разобраться с прототипным наследованием, что куда копируется при инстанцировании объектов и т.д. По ссылке что я привел все это есть.
Nikita Schipilov: да ну нет, все тоже самое что я Вам и в прошлом вопросе ответил. Там Вы клали в отделение для this и в отделение для prototype, а удаляли из самой сумки, в которой name создается автоматически и хранит название самой сумки, так сказать лейбла.