Возможный дубликат:
может Свойства только для чтения будут реализованы в чистом JavaScript?
У меня есть объект, который я хочу определить только при построении. Как я могу предотвратить изменение ссылки на объект?
Возможный дубликат:
может Свойства только для чтения будут реализованы в чистом JavaScript?
У меня есть объект, который я хочу определить только при построении. Как я могу предотвратить изменение ссылки на объект?
EDIT: это было написано 10 лет назад. Я не считаю этот ответ актуальным.
Реально... не перезаписывая его. Вы всегда можете контролировать доступ, обернув его в объект, который предлагает только 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 в objectHider не может быть изменена после создания объекта.
Я пытаюсь придумать практическое применение для этого.
hider.getObject
просто возвращает ссылку на объект someData
, и его можно изменить, например: hider.getObject().apples = 0;
, тогда hider.getObject();
вернет тот же измененный объект, так как hider.getObject() == someData
...
- person Christian C. Salvadó; 12.03.2010
function (obj) { return $.extend({}, obj); }
- person crush; 03.04.2015
В текущей широко доступной реализации ECMAScript 3 нет поддержки реальных неизменяемость.
ОБНОВЛЕНИЕ: В настоящее время ECMAScript 5< Стандарт /a> широко поддерживается. Он добавляет Object.seal
и Object.freeze
.
Метод Object.seal
предотвратит добавление свойств, но позволит пользователю записывать или редактировать существующие свойства.
Метод Object.freeze
полностью заблокирует объект. Объекты останутся такими же, какими они были, когда вы их заморозили. После того, как объект заморожен, его нельзя разморозить.
Больше информации:
Object.freeze
будет работать только на текущем уровне объекта, устанавливая собственные свойства, не настраиваемые и недоступные для записи, и предотвращая дальнейшие расширения (добавление новых свойств). Вы можете проверить внутренности зависания в следующем разделе спецификации: cms.gt/P7NKq
- person Christian C. Salvadó; 14.12.2018