Возможный дубликат:
Свойства Только для чтения могут быть Реализованы в Чистом JavaScript?У меня есть Объект, что я только хочу быть определенным при построении. Как я могу препятствовать тому, чтобы Ссылка на объект была изменена?
Реально ... без перезаписи. Вы всегда можете контролировать доступ, заключив его в объект, который предлагает только GetObj без SetObj, но, конечно, оболочка в равной степени подвержена перезаписи, как и ее «частные» свойства члена, которые были бы «скрыты» с помощью метода GetObj.
На самом деле, вопрос - обман:
Можно ли реализовать свойства только для чтения в чистом JavaScript?
РЕДАКТИРОВАТЬ:
После прочтения 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 не может быть изменена после создания объекта.
Я пытаюсь найти для этого практическое применение.
В текущей широко доступной реализации ECMAScript 3 нет поддержки реальной неизменяемости .
Стандарт ECMAScript 5 добавляет методы Object.seal
и Object.freeze
.
Метод Object.seal
предотвращает добавление свойств, по-прежнему позволяя пользователю записывать или редактировать свойства.
Метод Object.freeze
полностью блокирует объект. Объекты останутся такими, какими они были, когда вы заморозите их, и после того, как объект был заморожен, его нельзя разморозить .
В заключение, для неизменяемости реального объекта нам придется подождать до ECMAScript 5.
Дополнительная информация: