js 深拷贝浅拷贝、构造方法设计模式(单例、工厂、观察者)

拷贝

        概念:用已于对象初始化一个新的对象

        let a=123;
        let b=a;

 浅拷贝(只针对引用类型)

        概念:只拷贝地址,不拷贝空间和数据

	let arr = [5, 6, 8, 4, 2, 3, 5, 4];
	let arr1 = arr;
	arr1[0] = 666;
	console.log(arr, arr1)

        ps:相当于两把相同的钥匙对应一个空间

深拷贝(只针对引用类型)

        概念:开辟新空间且赋值

	let arr = [5, 6, 6, 5, 5, 441, 2, 2];
	let arr1 = [];
	for (let i = 0; i < arr.length; i++) {
		arr1.push(arr[i])
	}
	arr[0] = 9999;
	console.log(arr, arr1)
function Student(id, name) {
		this.id = id;
		this.name = name;
	}
	Student.prototype.clone = function() {
		let item = new Student(this.id, this.name);
		return item;
	}
	let s1 = new Student(1, "lalalala");
	let s2 = s1.clone();
	s2.haha=123
	console.log(s1.haha, s2.haha)

    ps:两把不同的钥匙对应两个不同的空间,改变其中一个空间中的值不会影响另一个空间


 本地存储、会话存储

        与cookie三者的区别

        生命周期:cookie一般由服务器生成,可设置会话周期和长生命周期
                          本地存储除非被清除,否则一直存在
                          会话存储只在当前会话有效,关闭页面或浏览器后被清除

        存储大小:cookie 4k左右;本地和会话存储 5mb

        与服务器通信:cookie参与服务器通信;本地会话存储在客户端浏览器中保存,不参与服务                                     器通信

        易用性:cookie需要封装,易用性差;本地和会话存储已经封装好,易用性好

本地和会话存储api

        增改:

  •         localSorage.setItem("name","嘿嘿");
  •         let l1=localStorage; l1.id=123;
  •         l1["id"]=123;

        读:

  •         localStorage.getItem("name");
  •         l1.id;
  •         l1["id"]

        删

  •         localStorage.removeItem("name");
  •         localStorage.clear();

        遍历

 for (let i = 0; i < localStorage.length; i++) {
       console.log(localStorage.getItem(localStorage.key(i)));
 }

构造函数的设计模式

        单例模式

        概念:一个类只能生成一个实例对象

        作用:传递数据

function king(name) {
		if (king.flag == undefined) {
			this.name = name;
			king.flag = this;
		} else {
			return king.flag;
		}
	}
	let k1 = new king("哈哈");
	let k2 = new king("嘿嘿");
	console.log(k2.name);
	console.log(k1 == k2)

        ps:是浅拷贝

        工厂模式

	function factory(role) {
		function student() {
			this.view = "考试"
		}

		function teacher() {
			this.view = "出题"
		}
		switch (role) {
			case "student":
				return new student();
			case "teacher":
				return new teacher()
		}
	}
	let s = factory("student");
	let s1 = factory("teacher");
	console.log(s, s1)

        观察者模式

        概念:用户观察者定义函数,订阅功能,管理员发布者调用函数,传送数据,实现发送功能

let sub1={
		update:function(info){
			console.log("01收到"+info+"信息");
		}
	}
	let sub2={
		update:function(info){
			console.log("02收到"+info+"信息");
		}
	}
	let sub3={
		update:function(info){
			console.log("03收到"+info+"信息");
		}
	}
	let sub4={
		update:function(info){
			console.log("04收到"+info+"信息");
		}
	}
	class admin{
		constructor(arr) {
		    this.arr=arr;
		}
		send(info){
			for(let i=0;i<this.arr.length;i++){
				this.arr[i].update(info)
			}
		}
	}
	let s=new admin([sub1,sub2,sub3,sub4]);
	s.send("闹钟响了")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值