|
|||||||
Классы в Java Script: Protected и Private - создание защищенных членов класса
Время создания: 05.05.2013 09:50
Текстовые метки: JavaScript, protected, private, свойство, метод, класс
Раздел: Компьютер - Программирование - Java Script - Классы в JavaScript
Запись: xintrea/mytetra_syncro/master/base/1367733033fxc38s1d4d/text.html на raw.github.com
|
|||||||
|
|||||||
Вначале нужно объяснить, что значит private и protected. Для объяснения опишем аналогичные модификаторы доступа из языка C++:
Исходя из этого описания видно, что члены класса с доступом Private и Protected доступны только в пределах класса (или в пределах класса-наследника). Извне такие свойства/методы недоступны. Попытка вызова из внешннего кода Private или Protected свойств/методов будет приводить к ошибке. Private-члены в JavaScript В JavaScript приватными являются все свойства, которые доступны только из внутренних методов объекта через механизм замыкания. Private-свойства объявляются через var. А так же приватными свойствами являются аргументы конструктора. Пример: function Animal(name, walkSpeed) {
// Объявляется приватная переменная var speed = walkSpeed;
// Объявляется открытая переменная this.distance = 0;
// Открытый метод, использующий private переменную speed this.walk = function(time) { this.distance = this.distance + time*speed; } } Следует помнить об особенности JavaScript, вытекающей из прототипного наследования. При объявлении свойств и методов в качестве Private, они записываются не в прототип объекта, а в сам объект. Поэтому, если объектов создается очень много, то это сопряжено с дополнительными расходами памяти на хранение множества копий кода методов - свой код для каждого объекта, а не один в прототипе на всех. Обычно же эти расходы можно во внимание не принимать. Примечание: Тут нужно разбираться дальше. К переменным, объявленным через var variableName; можно обратиться через this.variableName. Я встречал ситуации, когда обратиться просто по имени к переменным, объявленным через var, невозможно (при реализации синглтона). Protected члены в JavaScript Если Вы использовали ООП в других языках программирования, то наверняка знаете, что чаще делаются не private свойства, а protected, т.е такие, к которым могут получить доступ наследники. Javascript не предоставляет синтаксиса для создания protected свойств, поэтому их просто помечают подчеркиванием в начале. function Animal(name) { var privateVariable = 0
this._protectedName = name
this._protectedMethod = function(..) { ... alert(privateVariable).. }
this.publicMethod = function() { ... } } Все функции, объявленные внутри конструктора, имеют доступ к приватным свойствам и, конечно же, к защищенным и публичным. Ограничение доступа к таким "защищенным" свойствам не жесткое и остается на совести программиста. Материалы по теме: http://javascript.ru/tutorial/object/inheritance |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|