()冻结对象
1.作⽤(六不能,三可性,⼀但是)
(obj1);//对对象进⾏冻结
()⽅法可以冻结⼀个对象,冻结后的对象不能进⾏修改,不能对改对象添加新的属性,不能删除已有属性,不能修改该对象已
有属性的可枚举性,可配置性,可写性,已经不能修改已有属性的值,该对象的原型也不能被修改。若没有进⾏深层次冻结,则对象的属性
若是对象,则该对象的属性可以修改。
freeza返回和传⼊的参数相同的对象
2.使⽤⽅法
对象的例⼦
obj1={
a:1,
obj2:{
b:2,
c:3
}
}
(obj1.a);//1
(2.b);//2
(obj1);
obj1.a=777;//对冻结后的对象的属性进⾏修改
2.a=88888;//没有深层次的冻结对深层次的属性进⾏修改
(obj1.a);//1此时可以看到a已经被冻结了
(2.a);//此时结果为88888已经被修改了
可以得出:被冻结的属性不能进⾏修改,对对象进⾏冻结⼀次,不会对深层次的对象进⾏冻结。
数组中只有数字的例⼦
//对数组对象进⾏冻结以后,数组对象中的内容则不能改变
arr1=[1,2,3,4]
(arr1[1]);//2
(arr1);
arr1[1]=22222;
arr1[0]=1111111;
(arr1[0]);//1
(arr1[1]);//2
得出:被冻结的值不能进⾏改变
数组中含有对象
//数组中含有对象
arr2=[
{a:1},
{b:2},
{c:3}
]
(arr2[0].a);//1
(arr2);
arr2[0].a=1111111;
(arr2[0].a);//1111111没有被修改
可以得出:数组中的对象被冻结以后,对象就被冻结了
数组中对象的嵌套
//数组中含有对象
arr2=[
{a:1},
{b:2},
{
c:{
d:3
}
}
]
(arr2[0].a);//1
(arr2[2]);
(arr2[2].c);
(arr2[2].c.d+"数组中对象的徐对象的测试");
(arr2);
arr2[0].a=1111111;
arr2[2].c.d=77777
(arr2[0].a);//1111111没有被修改
(arr2[2]);
(arr2[2].c);
(arr2[2].c.d+"对数组中的对象进⾏了冻结");//7777777被修改了
得出:只进⾏浅层次的冻结,数组中对象的对象没有被冻结,还可以修改
3.:深度冻结(递归)
//深度进⾏冻结回调冻结
functiondeepFreeze(obj){
//获取对象的全部属性
letobjNames=PropertyNames(obj);
//此时的getOwnPropertyNames属性是获取对象的全部属性名
(objNames);//输出的结果是⼀个obj属性名的字符串数组
//对每个属性进⾏遍历如果属性是对象且不为空就将他冻结
h(function(name){
//这⾥⽤到了es6的属性表达式如obj.a=obj["a"]
letprop=obj[name];
(prop);
//在这⾥对每个属性进⾏判断判断是否为对象
if(typeofprop=='object'&&prop!==null){
//如果是则递归进⾏下⼀层
deepFreeze(prop);
}
})
//冻结
(obj);
}
obj3={
a:{
c:{
d:111111
}
}
}
(obj3);
("冻结前的结果"+obj3.a.c.d);//冻结前的结果111111
deepFreeze(obj3);
("冻结后的结果"+obj3.a.c.d);//冻结后的结果111111
本文发布于:2023-01-02 03:04:04,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/75984.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
| 留言与评论(共有 0 条评论) |