对象的复制
浅拷贝的几种方式
我们知道当一个对象a赋值给另一个对象b的时候,是把a地址赋值,我们之后操作修改b的时候也会更改a中的内容。我们不希望这种情况发生,所以就想要给b新开辟一个内存,再把a中的内容复制。
1 | /* 方式一:循环 */ |
1 | /* 方式二:Object.assign */ |
1 | /* 方式三:展开语法 */ |
- 可以发现,这种复制,都是复制的单层的属性,没有出现要复制的属性仍是一个对象的这种嵌套的情况,我们称这种复制叫浅拷贝。
对象的深拷贝
1 |
|
对象的封装
1 |
|
对象的属性特征
能不能对对象的属性设置一些特征:例如不可枚举,只读等特征
- 查看对象属性特征
1 | let obj = { name:'liqianru',lesson:'js' }; |
- 修改属性
1 | /* defineProperty可以为对象新增属性并设置其特征(默认值为false),也可以对现有属性修改其特征 。还可以为属性设置访问器*/ |
- 设置对象为不可添加属性的对象(扩展)
1 | Object.preventExtensions(obj); |
封闭对象
封闭对象:使对象不可添加属性,不可删除,不可修改属性特征,当前属性的值只要原来是可写的就可以改变。当对象需要被保护的时候可用
1 |
|
冻结对象
封闭对象:冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。
1 | Object.freeze(obj); |
使用访问器(setter,getter)保护数据
使用场景:当我设置了对象user,里面的属性的值可以被随意更改,对数据的质量没有把关。访问器就起到了把关的作用
1 | /* 初识 */ |
- 访问器的优先级
1 | let user={ |
- 使用访问器伪造属性
1 | let lesson = { |
- 使用访问器批量设置属性
1 | let user = { |
TOKEN读写操作
- 什么是TOKEN(令牌)?
Auth0中的解释:TOKEN分为两类: ID tokens and access tokens.
ID tokens:用于身份验证
access tokens:拥有这个令牌可以获取到API的使用权
所以就需要存储这些TOKEN,就可以使用访问器
1 |
|
构造函数&class中使用访问器
- 构造函数
1 | function User(name,age){ |
- class
1 | class User{ |