Я понимаю точку рекурсии над глубоким объектом, чтобы сделать мелкий Object.freeze
на каждое дочернее свойство. В чем смысл замораживания значения объекта функции? Ссылка уже заморожена из-за неглубокой заморозки на более высоком уровне - возможно ли само изменение значения объекта функции?Есть ли причина для Object.freeze функции?
Пример:
// Library Function [deepFreeze source](https://github.com/substack/deep-freeze/blob/master/index.js)
function deepFreeze (o) {
Object.freeze(o); // shallow freeze the top level
Object.getOwnPropertyNames(o).forEach(function (prop) {
if o[prop] != null // no point freezing null or undefined
&& (typeof o[prop] === "object" || typeof o[prop] === "function") {
deepFreeze(o[prop]);
}
});
return o;
};
// Usage
var x = {
y: [1,2,3],
z: function(){}
};
deepFreeze(x);
Просто пытаюсь увидеть, если есть что-то фундаментальное, я не понимаю, здесь или, если это просто защита от мутирует функции объекта, например: x.z.foo = 3
.
Функция по-прежнему является объектом, который вы можете расширить. Какая у вас дилемма? – MaxArt
Функция также представляет собой объект в JS (только тот, который может быть выполнен). Он может быть расширен дополнительными свойствами, как и любой другой объект. – Thomas
Функции - это объекты, которые вы все равно можете добавлять/удалять свойства в/из. Поэтому, если вы хотите полностью заморозить объект, вы захотите заморозить любые функции. –