Свойства и методы в JavaScript

В JavaScript нет нет специальных средств для объявления общедоступных (public), приватных (private) или защищенных (protected) свойств и методов, как в других языках. Для этого используются специальные методы.


var MyObj = function() {
	// Приватные свойства и методы
	// Функция образовывает замыкание, поэтому переменные видны внутри функции,
	// но не видны за ее пределами
	// Функция не должна возвращать ссылки приватные на объекты и массивы,
	// иначе они могут быть изменены
	// Приватные переменные не будут видны из прототипа
	var privateProperty = 'Private';
	var privateMethod = function() { // var можно упустить
		return privateProperty;
	};
	console.log(privateMethod()); // Private

	// Общедоступные свойства и методы
	// По умолчанию все свойства и методы объекта общедоступные
	this.publicProperty = 'Public';
	this.publicMethod = function() {
		return this.publicProperty;
	}

	// Приватные статические свойства (запоминаем в замыкании)
	var privateStaticMethod = function() {
		var privateStaticProperty = 'Private static';
		return function() {
      		return privateStaticProperty;
		}
	}();
	console.log(privateStaticMethod()); // Private static
}

// Публичные статические свойства и методы
MyObj.publicStaticProperty = 'Public static';
MyObj.publicStaticMethod = function() {
	return MyObj.publicStaticProperty;
};

// Тестируем
var myObj = new MyObj();

// Обращение к приватному методу вызовет ошибку
console.log(myObj.privateMethod()); // TypeError: myObj.privateMethod is not a function

console.log(myObj.publicMethod()); // Public

console.log(MyObj.publicStaticMethod()); // Public static
// Статические методы не доступны по умолчанию в экземплярах классов
console.log(myObj.publicStaticMethod()); // TypeError: myObj.publicStaticMethod is not a function
MyObj.prototype.publicStaticMethod = MyObj.publicStaticMethod;
console.log(myObj.publicStaticMethod()); // Public static

Автор: http://www.nika.org.ua
Дата: 12.05.14

Копирование материалов без указания "Автор: http://www.nika.org.ua" запрещено!