Основы программирования на JavaScript


Переменные Private, Public и Static


Способ определения переменных в объекте определяет, какие методы этого объекта можно использовать для доступа к этим переменным. В JavaScript при работе с объектно-ориентированным кодом используется пять уровней методов и свойств.

  1. Скрытая (Private) - объявляется с помощью 'var variableName' или 'function functionName' внутри объекта. Могут быть доступны только другим скрытым или привилегированным функциям.
  2. Открытая (Public) - объявляется с помощью 'this.variableName' внутри объекта. Может изменяться любой функцией или методом.
  3. Привилегированная (Privileged) - объявляется с помощью 'this.functionName = function(){ ... }' внутри объекта. Доступна для любой функции или метода и может обращаться или изменять любую скрытую переменную.
  4. Прототипированная (Prototype) - объявляется с помощью 'Class.prototype.variableName' или 'Class.prototype.functionName'. Объявленные таким образом функции будут иметь доступ к любой открытой или прототипированной функции. Попытки изменить созданную таким образом переменную будут вместо этого создавать новую открытую переменную на объекте, а прототипированная переменная будет недоступна.
  5. Статическая (Static) - объявляется с помощью 'Class.variableName' или 'Class.functionName'. Может изменяться любой функцией или методом. Такой метод используется редко.

Чтобы понять различия между уровнями, давайте рассмотрим пример:

function Cat(name, color){ /* Конструктор: при создании объекта выполняется любой находящийся здесь код */ Cat.cats++;

/* Скрытые переменные и функции доступны только скрытым или привилегированным функциям. Отметим, что 'name' и 'color', переданные в Class, уже являются скрытыми переменными. */

var age = 0; var legs = 4; function growOlder(){ age++; }

/* Открытые переменные доступны открыто или скрыто */

this.weight = 1; this.length = 5;

/* Привилегированные функции доступны открыто или скрыто. Могут обращаться к скрытым переменным.

Невозможно изменить, можно только заменить открытой версией */

this.age = function(){ if(age==0) this.length+=20;




Начало  Назад  Вперед



Книжный магазин