В приведённом вами коде происходит несколько интересных вещей, касающихся работы с классами в JavaScript.
1. **Создание экземпляра класса**: Когда вы создаёте экземпляр класса `Str` с помощью `new Str()`, создаётся объект `s`, у которого есть свойство `text`, равное `'hello'`. Это свойство определено в теле класса и относится к экземплярам этого класса.
```javascript
const s = new Str();
console.log(s.text); // 'hello'
```
2. **Добавление свойства к классу**: Вы добавляете свойство `word` непосредственно к классу `Str`, а не к экземплярам этого класса. Это свойство `word` становится статическим свойством класса. Оно доступно через сам класс, но не через созданные экземпляры.
```javascript
Str.word = 'word';
```
3. **Доступ к статическим свойствам**: Статические свойства класса, как `Str.word`, не доступны на уровне экземпляра, поэтому когда вы вызываете `console.log(s.word)`, будет выдана ошибка или возвращено `undefined`, так как `s` (экземпляр класса) не имеет свойства `word`.
```javascript
console.log(s.word); // undefined, т.к. это не свойство экземпляра
```
4. **Правильный доступ к статическим свойствам**: Чтобы получить доступ к статическому свойству `word`, вы должны обращаться к нему через сам класс `Str`, а не через экземпляр.
```javascript
console.log(Str.word); // 'word'
```
Таким образом, свойство `text` является свойством экземпляра, и его значение не изменится при добавлении свойства `word` в класс. В то время как свойство `word` добавлено к самому классу и доступно только через него, а не через его экземпляры.