手写Object.freeze

Object.freeze

该方法会将一个对象进行冻结。冻结的含义:对象已有的属性值不能被重写,不能再给对象添加或者删除属性。并且,冻结后的对象的原型也是不可修改的。

但是如果被冻结对象中的一个属性是一个对象,则该对象中的属性是可以修改的,除非他被声明为冻结对象。

  1. 不可枚举的属性也要进行冻结
  2. 只冻结对象自身的属性,原型对象上的属性不冻结。
  3. symbol类型数据的单独处理
  4. 对象所有自有的属性的不可编辑
const _objectFreeze = object => {
    if(typeof object !== 'object' || object === null) {
        throw new TypeError(`the ${object} is not a object`)
    }
    //for in 语句会将原型链上的可枚举属性也返回
    const keys = Object.getOwnPropertyNames(object)
    const symbols = Object.getOwnPropertySymbols(object)
    [...keys, ...symbols].forEach(key => {
        Object.defineProperty(object, key, {
            //对象属性的相关配置
            configurable: false,//属性是否可以删除和重新定义
            writable: false,//属性值是否可以修改
        })
    })
    //冻结所有属性
    Object.seal(object)
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • **Object.prototype** 属性表示 Object 的原型对象 描述 几乎所有的 JavaScrip...
    Kevin丶CK阅读 3,241评论 0 4
  • Object Object.assign() 将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标...
    bloom_os阅读 407评论 0 1
  • MDN-Object思维导图 1.Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复...
    XIU_b081阅读 465评论 0 0
  • Object.freeze(obj)方法可以冻结一个对象。一个被冻结的对象再也不能被修改,冻结了一个对象, 则不能...
    郭_小青阅读 145评论 0 1
  • 本文概要 一、概述 JavaScript 的所有其他对象都继承自Object对象,即那些对象都是Object的实O...
    范小饭_阅读 702评论 0 0