Сегодня мы рассмотрим Свойства класса JavaScript, но для начала вот список статей на тему «Объекты в JavaScript»:
- Объекты основанные на прототипах
- Конструкторы JavaScript
- Прототипы JavaScript
- Наследование через цепочку прототипов
Свойства класса JavaScript
Кроме свойств экземпляра и свойств прототипа, JavaScript позволяет определить свойства класса (также называемые статическими свойствами) — это скорее свойства типа, чем свойства экземпляра конкретного объекта. Примером свойства класса является Number .MAX_VALUE. Это свойство является константой соответствующего типа и поэтому более логично размещать его в классе (конструкторе), а не в индивидуальных объектах Number.
Но как именно реализуются свойства класса?
Конструкторы являются функциями, а функции — объектами, поэтому в конструкторы можно добавлять свойства. Свойства класса добавляются точно так же. Строго говоря, в результате к конструктору соответствующего типа добавляется свойство экземпляра, но мы будем называть это свойство переменной класса.
Так, для нашего примера
1 2 |
Robot.isMetallic = true; |
определяет свойство класса объекта Robot с помощью добавления переменной экземпляра к конструктору. Важно помнить о том, что статические свойства существуют только в одном месте — как члены конструкторов. Они, таким образом, оказываются доступными с помощью конструктора, а не экземпляра объекта.
Как уже объяснялось выше, статические свойства обычно содержат данные или программный код, не зависящий от конкретного экземпляра. Метод ToLowerCase() объекта String не может быть статическим, поскольку возвращаемая им строка зависит от объекта, который его вызывает. А вот свойство PI объекта Math (Math. PI) и метод parse() объекта String (String.parse() ) — могут, потому что не зависят от значения конкретного экземпляра. И из способа доступа к ним видно, что они действительно являются статическими свойствами. Свойство isMetallic, которое мы только что определили, доступно точно так же: Robot.isMetallic.
Замена свойств
Часто бывает полезно заменить поведение «родителя» новым, чтобы обеспечить нужные свойства для пользовательских объектов. Например, значением по умолчанию toString() для объектов является » [object Object] «. Возможно, вы пожелаете заменить такое поведение, определив новый, более подходящий метод toString() для объектов определенных типов:
1 |
Robot.prototype.toString = function() { return "[object Robot]"; ); |
Для классов, унаследованных от Robot, метод можно тоже заменить, например, так:
1 |
UltraRobot.prototype.toString = function() {return "[object UltraRobot]"; }; |
Это не только желательная практика программирования, но это оказывается полезным при отладке, поскольку » [object Object] » вряд ли сообщит вам то, что нужно.