从字面理解,freeze是冷冻,冻结的意思(像账户冻结)。
当用const申明常量时,基础数据类型申明后是不可以被修改的,但是申明数组和对象时,申明的变量只是指向了该引用数据类型的地址,所以只是地址不允许被修改,但是内容可以被修改,这个时候就可以用到Object.freeze()函数了
给用Object.freeze()函数包裹的对象添加属性时,打印出来的结果是没有添加成功的,那么对已有的属性进行修改,能否实现呢
打印出来结果,并没有修改成功,这也就是Object.freeze()函数的作用,可以冻结数据,内容不允许被拓展和修改。
那么在Object.freeze()函数之前,是怎么实现引用数据类型的冻结功能的呢,根据Object.freeze()的这两个功能,我们可以手动封装一个Object.freeze()
可以看到用Object.defineProperty()函数对对象的属性添加了只读的描述后,该属性也是不允许被修改的,但是obj还是可以添加属性的,那么我们在用Object.seal()函数将obj包裹一下,就可以实现不允许添加属性的功能了
也就是说,我们可以把引用数据类型同时用Object.defineProperty()和Object.seal()函数封装包裹起来,就可以实现Object.freeze()函数的效果了
效果也是一样的,这就是Object.freeze()函数所实现的功能了。