DEV Community

Discussion on: const 📦, seal 🤐, freeze ❄️ & immutability 🤓 in JS

Collapse
 
fpresencia profile image
Francisco Presencia

I created a deep freeze method just like this! For a similar article I wrote last week. The snippet is part of my React state management library Statux:

// Deep freeze any object
const freeze = obj => {
  // Does not need freezing
  if (typeof obj !== "object") return obj;  // Already frozen
  if (Object.isFrozen(obj)) return obj;  // Freeze props recursively before freezing self
  for (let key of Object.getOwnPropertyNames(obj)) {
    if (Array.isArray(obj) && key === "length") continue;
    obj[key] = typeof obj[key] === "object"
      ? freeze(obj[key])
      : obj[key];
  }
  return Object.freeze(obj);
};

To use it:

const user = freeze({
  name: 'Sarah',
  friends: ['John']
});

user.friends[0] = 'Tim';
// Error as expected 🎉