Подтвердить что ты не робот

Как вы можете сделать переменную/объект только для чтения в Javascript?

Возможный дубликат:
Могут ли свойства, доступные только для чтения, в Pure JavaScript?

У меня есть объект, который я хочу определить только при построении. Как я могу предотвратить изменение ссылки на объект?

4b9b3361

Ответ 1

Реально... не переписывая его. Вы всегда можете контролировать доступ, обернув его в объект, который предлагает только GetObj без SetObj, но, конечно же, оболочка в равной степени может перезаписывать, а также ее свойства "private", которые будут "скрыты" с помощью метода GetObj.

Собственно, вопрос - обман:

Могут ли свойства, доступные только для чтения, в Pure JavaScript?

EDIT:

После чтения http://javascript.crockford.com/private.html, можно использовать закрытие для создания ссылок на переменные, которые действительно недоступны из внешнего мира. Например:

function objectHider(obj)
{
    this.getObject=function(){return obj;}
}

var someData={apples:5,oranges:4}

var hider=new objectHider(someData);

//... hider.getObject()

где ссылка на obj в объектеHider не может быть изменена после создания объекта.

Я пытаюсь придумать практическое применение для этого.

Ответ 2

В текущей широко распространенной реализации ECMAScript 3 нет поддержки реальной неизменности.

Стандарт ECMAScript 5 добавляет методы Object.seal и Object.freeze.

Метод Object.seal предотвратит добавление свойств, все еще позволяя пользователю писать или редактировать свойства.

Метод Object.freeze полностью заблокирует объект. Объекты будут находиться точно так же, как они были, когда вы их замораживаете, и как только объект был заморожен, он не может быть разморожен.

В заключение, для реальной неизменности объекта нам придется подождать до ECMAScript 5.

Дополнительная информация: