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

Возможный дубликат:
Свойства Только для чтения могут быть Реализованы в Чистом JavaScript?

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

27
задан Community 23 May 2017 в 12:26
поделиться

2 ответа

Реально ... без перезаписи. Вы всегда можете контролировать доступ, заключив его в объект, который предлагает только 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 не может быть изменена после создания объекта.

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

15
ответ дан 28 November 2019 в 04:38
поделиться

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

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

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

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

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

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

51
ответ дан 28 November 2019 в 04:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: