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

Loop for moved out from constructor of class Logable #2

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

Romchik38
Copy link

В текущем коде нет возможности создать новый инстанс класса Person.

  • При добавлении такой строки:
    const p2 = new Person({ name: 'Marcus Aurelius', born: 121 });

  • Выдает ошибку:
    Object.defineProperty(Logable.prototype, key, {
    ^
    TypeError: Cannot redefine property: name

Для устранения этого явления цикл for был вынесен за пределы constructor и при создании нового инстанса не происходит переопределение свойств Logable.prototype.

В остальном поведение функции logable и класса Logable не изменилось.

@timursevimli
Copy link
Member

timursevimli commented Jan 15, 2023

Здраствуйте, за любопытство посмотрел ваше решение.
Вы цикл for убрали от конструктора и добавили его в метод toString. Но в цикле for, добавляется поля к классу. А функция которого добавили этот цикл называется toString.
Так какая между ними связь что функция названием toString добавляет поля к обьектам ?

А еще, все что находиться в конструкторе, запускается сразу же вовремя инитилизации, то есть когда пишем new Person({}) срабатывает цикл for и добавляется поля в обьект. Но если эту опцию убрать из конструктора и присвоить к какому то методу, то что бы добавить эти поля к классу то нам придется после инитилизации класса еще и вызывать данный метод что бы появились поля в классе.

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