Прежде всего, они не являются "свойствами класса". Это свойства экземпляра, объявленные заранее. Это дает вам четкое представление о том, какие поля (свойства) можно ожидать от экземпляра класса .
На основе документации :
Publi c и объявления частных полей являются экспериментальной функцией (стадия 3) , предложенной на TC39, комитете по стандартам JavaScript. Поддержка в браузерах ограничена, но эту функцию можно использовать на этапе сборки с такими системами, как Babel.
Итак, основываясь на предложении в ссылке, ваш код предназначен для объявления publi c свойства экземпляров класса:
class Person {
myProperty ='Something' // this means anyone can access the property
}
Для частных свойств они предлагают следующий синтаксис:
class Person {
#myPrivateProperty ='Something' // this means only the instance methods have access
}
Чтобы ответить на ваши вопросы :
- Где хранится myProperty, я не могу найти его где-либо внутри Person или Athlete?
Он хранится как свойство экземпляра объекта. экземпляр класса Person
. Поскольку Athlete
расширяет его, экземпляру Athlete
также будет присвоено то же свойство. Прочитайте Объектно-ориентированное программирование для получения более подробной информации.
Почему я могу получить доступ к myProperty внутри writeSomething ()?
writeSomething()
- это метод экземпляра, поэтому он имеет доступ к любому свойству экземпляра. (publi c и private)
Почему myProperty появляется внутри спортсмена, когда он больше нигде не появляется?
Он также должен появляться в экземпляре Person
. Например, вы можете написать:
const person = new Person();
person.myProperty = 'new Something';
Является ли это другим способом записи свойств в отличие от Person.myProperty или это что-то еще?
Это просто объявление свойств экземпляра, которое стало более простым и интуитивно понятным и подразумеваемым модификатор доступа (то есть public
).
Наконец, если вы хотите объявить свойство класса , вам нужно указать его как static
свойство, например:
class Person {
static myProperty = 'some value';
}
console.log(Person.myProperty);