Какие отличия между свойствами, объявленными в конструкторе и вне конструктора в JavaScript?

Чем отличается использование свойства `_meta` в данном коде? В чем цель вызова этого свойства дважды?
  • 23 февраля 2024 г. 10:48
Ответы на вопрос 2
1. Отличия между свойствами, объявленными в конструкторе и вне конструктора:
- Свойства, объявленные в конструкторе, будут уникальны для каждого экземпляра созданного с помощью этого конструктора объекта. Это означает, что каждый объект будет иметь собственную копию этих свойств.
- Свойства, объявленные вне конструктора (на прототипе), будут общими для всех экземпляров объекта, созданных с использованием данного конструктора. При этом экземпляры будут иметь доступ к этим свойствам через цепочку прототипов.

2. Использование свойства `_meta` в данном коде:
В данном коде свойство `_meta` используется для хранения метаинформации или дополнительных данных о объекте. Цель вызова этого свойства дважды может быть различной:
- Первый вызов `_meta` может быть для доступа к метаинформации объекта, например, чтения или изменения данных.
- Второй вызов `_meta` может быть для выполнения какой-то операции, зависящей от данных, хранящихся в `_meta`.

Пример:
```javascript
function User(name) {
  this.name = name;
  this._meta = {
    createdAt: new Date()
  };
}

User.prototype.getCreationDate = function() {
  return this._meta.createdAt;
}

let user1 = new User('Alice');
console.log(user1.name); // Output: Alice
console.log(user1._meta.createdAt); // Output: Date object
console.log(user1.getCreationDate()); // Output: Date object
```
В первом случае - ты объявляешь поле. Т.е. говоришь, что у класса есть такое поле 
Во втором случае - это поле инициализируешь значением. Т.е. присваиваешь какое-то значение, до этого момент там undefined
Похожие вопросы