Js中Object.freeze()方法

摘要:Object.freeze() 方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。

Object.freeze方法的作用 

Object.freeze()是ES5新增的特性,Object.freeze() 方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze() 返回和传入的参数相同的对象。


Object.freeze方法冻结对象有如下特点:  

(1).对象不能被扩展,也就是不能添加新的属性与方法。

(2).对象属性不能被删除。

(3).对象属性值也不能被改变。

(4).对象属性的可枚举性、可读写性与可配置性都不能修改。


Object.freeze的使用

语法

Object.freeze(object)

参数

object:必需。在其上锁定特性的对象。

返回值

传递给函数的对象。

异常

如果 object 参数不是对象,则将引发 TypeError 异常。

例子

将对象冻结,使用Object.freeze方法   

const foo = Object.freeze({});
// 常规模式时,下面一行不起作用;
// 严格模式时,该行会报错
foo.prop = 123;
var t = {
    a:{
        t:2
    }
}    
//冻结t对象下属性a
Object.freeze(t)

t.a.t = 3
//不能冻结属性a下的值obj中的对象
console.log(t.a.t) //3

除了将对象本身冻结,对象的属性也应该冻结。下面是一个将对象彻底冻结的函数。

var constantize = (obj) => {
  Object.freeze(obj);
  Object.keys(obj).forEach( (key, i) => {
    if ( typeof obj[key] === 'object' ) {
      constantize( obj[key] );
    }
  });
};


本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://shenqiku.cn/article/FLY_3339