deep-freeze-strict
Version:
recursively Object.freeze() objects and functions, works in strict mode
19 lines (15 loc) • 534 B
JavaScript
module.exports = function deepFreeze (o) {
Object.freeze(o);
var oIsFunction = typeof o === "function";
var hasOwnProp = Object.prototype.hasOwnProperty;
Object.getOwnPropertyNames(o).forEach(function (prop) {
if (hasOwnProp.call(o, prop)
&& (oIsFunction ? prop !== 'caller' && prop !== 'callee' && prop !== 'arguments' : true )
&& o[prop] !== null
&& (typeof o[prop] === "object" || typeof o[prop] === "function")
&& !Object.isFrozen(o[prop])) {
deepFreeze(o[prop]);
}
});
return o;
};