运行结果:报错,说明不可设置特性
去掉设置特性的代码,来尝试是否可以添加属性和修改属性值
Object.freeze(obj);//不可添加属性,不可设置特性,不可修改属性值
Object.freeze(obj);//不可添加属性,不可设置特性,不可修改属性值
Object.defineProperty(obj, ‘x’,{
writable:false,
enumerable:true,
configurable:true,
})
运行结果:报错,说明不能设置特性
去掉设置特性的代码,来尝试是否可以添加属性和修改属性值
查看特性的方法:
1.Object.isExtensible(obj)
2.Object.isSealed(obj)
3.Object.isFrozen(obj)
浅克隆
之前的文章已经有提过,如果用等号赋值复杂对象,obj1 = obj;复制的这是对象的地址,当obj改变时,obj1也改变;当时是使用for … in遍历的方法来拷贝
var obj = {x:1, y:2};
// 浅克隆
var obj1 = {};
for (var i in obj){
obj1[i] = obj[i];
}
但这种方法依然不能应对 属性值是是复杂对象的情况,所以还是属于浅克隆,浅拷贝
var obj = {x:1, y:{x:2}};
// 浅克隆
var obj1 = {};
for (var i in obj){
obj1[i] = obj[i];
}
运行效果:
深克隆:
我们可以利用递归,写一个函数解决这个问题:
var obj = {x:1, y:{x:2}};
//深克隆
function myClone(obj){
var obj1 = {};
for (var i in obj){
if (typeof(obj[i]) == ‘object’){
obj1[i] = myClone(obj[i]);
}
else{
obj1[i] = obj[i];
}
}
return obj1;
}
运行结果:
这个递归函数的书写思路:
1.先想最简单的,从外部看向里面的功能,就是传入一个obj,返回一个复制的obj1;即var obj1 = {}; return obj1;
2.然后是写遍历,遍历没有复杂属性值的部分,即for(var i in obj){obj1[i] = obj[i];}
3.最后写,如果遇到复杂的属性值,就调用这个函数,传入的是obj的一个属性,返回复制的属性,即obj1[i] = myClone(obj[i]);
原型克隆
原型对象修改了,继承该原型的对象如果需要使用原型对象上的某属性,得到的值就会是更新的值,
并且,如果我通过当前对象修改原型上的深层属性(当前对象没有该属性,原型对象上有),被当作原型对象的值会直接发生改变
就像这样,myClone1返回的值是以obj为原型的空对象
var obj = {x:1, y:{x:2}};
//原型克隆
function myClone1(obj){
function Temp(){}
Temp.prototype = obj;
return new Temp();
}
如果修改了obj2.y.x,obj也会被改变,因为obj2本没有y属性,就会向它的原型找这个属性,obj2.y的值依然是一个引用类型,因此它的改变会影响obj的值
obj2是空对象:
我就去试了一开始讲原型的案例:我之前写的那篇
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!