原型和深浅拷贝

**

原型和原型链

**
1.–proto–:原型链对象,表示当前类型的父级元素任何类型都具有;

2.prototype:原型对象,只有函数才有,专门给将来别new出来的对象做父级的(箭头函数没有prototype,因为箭头函数不能被new出来);

3.对象访问属性和方法的原则——就近原则:先在自己的身上找,找到了就执行,找不到顺着——proto——向上依次寻找,找到了就停止执行 个,找不到一直向上。

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<script>
		function fn(){
			this.name='zhangsan'
		}//构造函数
		fn.prototype.show=function(){}
		var p1=new fn();//实例化
		var a={}//字面量
		console.dir(fn);
		console.log(p1);
		console.log(a);
		console.log(a.__proto__==p1.__proto__.__proto__);
		console.log(fn.prototype==p1.__proto__)
	</script>

</body>
</html>

解析:1.new出来的实例父对象就是构造函数的prototype,将方法和属性存入构造函数的prototype中也就是将属性和方法存入了实例的父对象中,然后new出来的实例利用(就近原则)找到相应的属性和方法。

**

深浅拷贝

**
一.堆和栈的概念

栈:储存变量名,不可修改,空间小,先进后出;

堆:储存数据,可以修改,空间大。先进先出;

二.数据的复制方式

	1.基础数据(值传递):字符,数值,布尔,undefined

	复制时,复制的是值,在栈堆关系中,栈和堆,一一对应


​ 2.复杂数据(引用传递):对象(数组,函数)
​ 复制时,复制的是内存地址,在栈堆关系中,栈和堆,可以多对一

​ 引用传递数据类型的
​ 深浅拷贝:
​ 默认是浅拷贝:只拷贝地址,不拷贝值

	深拷贝:拷贝值

​ 对象的枚举:for-in,(递归)
​ 三:实例

  var a=10;
		var b=a;
		b=20;
		console.log(a,b);//基础数据的复制方式
		//复杂数据的复制方式:引用传递,复制的是内存地址

		//这是对象的浅拷贝,
		var obj1={
			name:'zhangsan',
			age:18,
			sex:'男'
		}
		var obj2=obj1;	//复杂类型的引用传递
		obj2.name='陈军';
		console.log(obj1,obj2);
		//对象的深拷贝
		var obj3={};
		for(var i in obj1){
			obj3[i]=obj1[i];//转化成了简单类型转化
		}
		obj3.name='张钦';
		console.log(obj3,obj2)

四:对象深拷贝方法简介

1.对象的枚举for in(见实例)

2.利用json和对象的转化:JSON.parse和JSON.stringify 让对象的复制由对象转为字符的运算

var obj1={
			name1:{
				name2:{
					name3:{
						name4:'哈哈'
					}
				}
			}
		}
		var str=JSON.stringify(obj1);
		var obj2=JSON.parse(str);
		obj2.name1.name2.name3.name4='呵呵';
		console.log(obj1,obj2);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值