拷贝
概念:用已于对象初始化一个新的对象
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("闹钟响了")