Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lesson4 #4

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open

Lesson4 #4

wants to merge 3 commits into from

Conversation

alexcoach030
Copy link
Owner

@alexcoach030 alexcoach030 commented Feb 27, 2021

Здравствуйте!
В ходе изучения объектов возник вопрос по функционалу инструментов разработчика - возможно ли там посмотреть все ссылки на имеющийся объект (т.е. все, что делает объект "достижимым" в памяти), чтобы не допустить удаление объекта из памяти "сборщиком мусора"?

Так же насущные вопросы по изучению темы объектов записал в комментариях в самом конце файлов key.js, ladder.js, calcConstruct.js (каждый файл содержит пример и вопрос, все три файла подключены к индексу, но закомментированы изначально). Вопросы из key.js, ladder.js и calcConstruct.js возникли при решении различных практических задач по работе с объектами и связаны с рядом тонких, но важных моментов по использованию this и [ключ].

Кроме того, возник вопрос - как вывести объект целиком через alert, например? Попытки вывести объект целиком через alert в текущем виде выдают [object Object].
И еще вопрос - когда лучше обращаться к ключам объекта через . , а когда через []?

При работе над ДЗ, так же, возник вопрос - можем ли мы подсчитать общее количество того или иного ключа в объекте? Или, может быть, существуют иные способы, как мы можем подсчитать общее количество товаров в каталоге, например, если каталог реализован как множество объектов в одном большом объекте?

В заданиях 1 и 2 оставил в строчках комментарии почти ко всем действиям, интересно, можно ли было какие-либо действия сократить за отсутствием в них необходимости.

Что касается задания 3:
Выходит, мы можем реализовать каталог как:

  1. Массив с объектами
  2. Объект с объектами
  3. Массив с массивами

С точки зрения практичности, для каталога наиболее удобным выглядит, если продукты в нем будут представлены объектами. Вместе с тем, выбор обертки (массив или объект) зависит от того, насколько крупным ожидается наш каталог (поскольку, как мы уже выяснили, массив в качестве обертки через свои методы хорошо расширяет функционал, но, вместе с тем, эти методы будут менее быстродействены). Так же влияние будет оказывать, как мы планируем впоследствии работать с каталогом - необходимо ли нам лишь только по запросу получать доступ к конкретному товару в каталоге, либо же мы планируем регулярно проводить различные массовые операции с группами товаров в каталоге, перемещая их в различные иные структуры.
Правильно ли я мыслю в этом отношении? Какие могут быть еще нюансы? И, возможно, я упустил какой-либо способ реализации каталога?

Здравствуйте!

Задания для ДЗ изначально смотрел в методичке, и только потом посмотрел, что на сайте задания изменены. Поэтому задания, которые на сайте помечены под номерами 2 и 3, у меня будут как 4 и 5.

В ходе изучения объектов возник вопрос по функционалу инструментов разработчика - возможно ли там посмотреть все ссылки на имеющийся объект (т.е. все, что делает объект "достижимым" в памяти), чтобы не допустить удаление объекта из памяти "сборщиком мусора"?

Так же насущные вопросы по изучению темы объектов записал в комментариях в самом конце файлов key.js, ladder.js, calcConstruct.js (каждый файл содержит пример и вопрос, все три файла подключены к индексу, но закомментированы изначально). Вопросы из key.js, ladder.js и calcConstruct.js возникли при решении различных практических задач по работе с объектами и связаны с рядом тонких, но важных моментов по использованию this и [ключ].

Кроме того, возник вопрос - как вывести объект целиком через alert, например? Попытки вывести объект целиком через alert в текущем виде выдают [object Object].
И еще вопрос - когда лучше обращаться к ключам объекта через . , а когда через []?

При работе над ДЗ, так же, возник вопрос - можем ли мы подсчитать общее количество того или иного ключа в объекте? Или, может быть, существуют иные способы, как мы можем подсчитать общее количество товаров в каталоге, например, если каталог реализован как множество объектов в одном большом объекте?

В заданиях 1 и 2 оставил в строчках комментарии почти ко всем действиям, интересно, можно ли было какие-либо действия сократить за отсутствием в них необходимости.

Что касается задания 3:
Выходит, мы можем реализовать каталог как:

  1. Массив с объектами
  2. Объект с объектами
  3. Массив с массивами

С точки зрения практичности, для каталога наиболее удобным выглядит, если продукты в нем будут представлены объектами. Вместе с тем, выбор обертки (массив или объект) зависит от того, насколько крупным ожидается наш каталог (поскольку, как мы уже выяснили, массив в качестве обертки через свои методы хорошо расширяет функционал, но, вместе с тем, эти методы будут менее быстродействены). Так же влияние будет оказывать, как мы планируем впоследствии работать с каталогом - необходимо ли нам лишь только по запросу получать доступ к конкретному товару в каталоге, либо же мы планируем регулярно проводить различные массовые операции с группами товаров в каталоге, перемещая их в различные иные структуры.
Правильно ли я мыслю в этом отношении? Какие могут быть еще нюансы? И, возможно, я упустил какой-либо способ реализации каталога?

А что касается объекта самого продукта, то вижу здесь в качестве самых важных ключей такие, как id, имя и текущая цена. Этих трех, по идее, должно быть достаточно для любых операций, а все остальные будут уже факультативны. Так, дополнительно можно добавлять различные ключи вроде sales:true, например, и учитывать это в формуле подсчета стоимости корзины, и так далее - но это уже все вполне доступно для любых настроек.

Задание 4 выполнено в labirint.js, в самом конце файла оставил комментарий с тем, как реализовал необходимую функцию. Все работает исправно (по крайней мере, я ошибок не обнаружил).

Задание 5 выполнено в billions.js, не знаю, насколько я правильно понял, какой вид должна была игра приобрести, но в реализованном виде все работает, комментарии по алгоритму оставил в коде

@va-petrov
Copy link

Отвечу здесь, много вопросов.

  1. По поиску ссылок на объект, я такой возможности не знаю, возможно ее и нет. Хотя мысль идет в правильном направлении. В языках со сборщиком мусора одна из основных проблем - подвисающие ссылки, из-за которых утекает память. Особенно это актуально в асинхронном программированиии на бэкенде, где серверный процесс обычно живет долго, накапливая утечки.
  2. Вообще alert конечно лучше не использовать в реальных задачах. Мы пока его используем от того, что еще не умеем работать со страницей. Лучше делать вывод в console.log. Через нее объекты выводятся более полноценно, но тоже есть ограничение вложенности, после которого будет выводиться [Object ...]. Управлять уровнями вложенности можно в console.dir. Также можно воспользоваться функцией JSON.stringify(), которая преобразует любой объект в строку формата JSON, ее можно применить и в alert.
  3. По каталогу у вас все логично написано. Особо нечего добавить. Нюансы еще могут быть как делать ссылки на каталог в других местах, где нужно ссылаться на товары. Я об этом на уроке кое-что еще скажу.

@va-petrov
Copy link

В цикле for in мы получаем не только ключи, которые сами записали в объект, но и служебные вроде proto поэтому у вас вылезает NaN при суммировании. Чтобы защититься от этого, нужно пользоваться функцией объекта HasOwnProperty(key), которая возвращает true для нужных ключей.

@va-petrov
Copy link

В том что вы пытаетесь сделать в ladder this как таковой не причем. Если вы ничего не вернете из функции, то этим ничего никак и не сможете воспользоваться дальше, например вызвать следующую функцию. Так как у вас часто делается для того, чтобы функции можно было записывать в цепочку, каждая функция возвращает тот же или видоизмененный объект.
Что касается вообще темы this, я бы рекомендовал почитать соответствующую книгу из серии "вы не знаете JS". Эта тема в программировании на JS одна из ключевых, понимание что это такое и всех подводных камней. По простому this - это контекст того объекта у которого вызвана функция, но есть разные нюансы.

@va-petrov
Copy link

Вопрос в calcConstruct не понял. Где вы пытались применить this read() и почему без точки? this.read() будет иметь смысл только там, где есть соответствующий this, а именно в функциях вызываемых у объекта. В общем про this почитайте лучше книгу, слишком много можно написать по одной этой теме :-).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants