宝哥软件园

如何用JS实现实对象常量

编辑:宝哥软件园 来源:互联网 时间:2021-09-04

众所周知,ES6中的new const关键字可以用来声明常量,但它只适用于基本数据类型(Number、String、Boolean等)。).如果我们想要声明一个常量对象呢?如何实现呢,Object的内置Object早就为我们想到了,下面具体看看吧

谈话或文章的主题

首先,看看声明基本类型常量的const方法

代码:

Const name='jack' name='lucy' /修改name常量的运行结果:

可以看到控制台报告了一个错误,所以一旦声明要复制基本类型常量,就不能再修改了

其次,使用const声明复杂类型常量(即对象常量)

代码:

const obj={ name : ' jack ' } obj . name=' Lucy '//修改属性Obj.age=23 //扩展属性console . log(obj . name)console . log(obj . age)delete obj . ageconsole . log(obj . age)/。

结果表明,对象常量的引用地址不允许修改,但属性仍然可以修改、扩展和删除

为了得到一个真实的对象常数,我们所要做的就是以下三点:

1.对象的属性可能无法扩展

2.无法删除对象的属性。3.无法修改对象的属性

(1)首先,对象属性怎么能不扩展?我们可以用对象预防方法做到这一点

代码:

varobj={ name : ' jack ' } object . prevent rails(obj)obj . age=23//扩展属性console . log(obj . age)//undefined(表示扩展失败)运行结果:

(2)那么,扩展的问题就解决了,那么如何实现属性不会被删除呢?不用担心,我们有Object.seal方法,不仅可以保证对象的属性不会被扩展,还可以防止属性被删除

代码:

varobj={ name : ' jack ' } object . seal(obj)obj . age=23//扩展属性console . log(obj . age)//undefined(表示扩展失败)delete Obj.name //删除属性console.log (obj.name)/'

(3)扩展和删除的问题都解决了,留下了属性无法修改的问题。然后我们知道终极Boss:Object.freeze,它能做的对象既不能扩展也不能删除,更不能修改。

代码:

varobj={ name : ' jack ' } object . freeze(obj)obj . age=23//扩展属性console . log(obj . age)//undefined(表示扩展失败)Delete obj . name//Delete attribute console . log(obj . name)/' jack '(表示删除失败)obj . name=' Lucy '/modify attribute console . log(obj . name)/' jack '(表示修改失败)

运行截图:

/* * * *

以上是如何实现真实对象常量的分步演示,但存在以下两个问题:

1.如果我们调用了这三种方法中的任何一种,然后我们做了它们禁止的事情(preventExtensions禁止扩展属性、seal禁止删除属性、冻结禁止修改属性),那么,如果在严格模式下,程序就会报错,所以我们要谨慎使用。

2.虽然2。Object.freeze实现真正的对象常量,它的所有操作只对顶级对象属性生效。下面的代码说明了这个问题

代码:

Varobj={name:' jack ',extrainfo: {age:23}}对象。冻结(obj)obj . extra info . age=80 console . log(obj . extra info . age)//80运行截图:

因此,为了真正实现一个不变的对象,我们需要以树的形式冻结该对象的所有后代。冻结和递归可以解决这个问题

//constantize实现递归冻结var constant ize=(obj)={ object . freeze(obj);object . key(obj)。forEach((key,I)={ if(type of obj[key]==' object '){ constant ize(obj[key]);} });} var obj={name :' jack ',extra info : {age : 23}}常量ize(obj)obj . extra info . age=80 console . log(obj . extra info . age)//23结论

这些是常量对象的一些知识点。在日常开发中,我们可以引入对象常量的概念来配置默认的参数对象或一些配置信息,使我们的代码更加严谨

这个关于JS如何实现实对象常量的简短的谈论,是边肖分享的全部内容,希望能给大家一个参考和支持。

更多资讯
游戏推荐
更多+