Object.freeze

# Object.freeze

# 描述

Object.freeze 可以冻结一个对象使其不能新增、删除属性,其下的属性也无法修改。

freeze 的实现由两部分组成

  • Object.seal() 作用是让对象无法扩展、删除属性。
  • Object.defineProperty() 作用是通过配置对象使属性无法修改。

简单来说就是这个对象变为了只读。

# 代码实现

    function freeze(target) {
        if (target && target instanceof Object) {
            Object.seal(target);
            for (let key in target) {
                if (Object.prototype.hasOwnProperty(target, key)) {
                    Object.defineProperty(target, key, {
                        writable: false
                    })
                    if (target[key] instanceof Object) freeze(target[key])
                }
            }
        }
        return target
    }