数据持久化 ---闭包 ---继承

162 阅读2分钟

数据持久化

-服务端存储
    -数据库:mysql(sql语句:curd)   , mongohb : 对象形式存储
    -文件存储 
-客户端存储
    -cookie 存储 村小数据
    -webstorage
        -localstorage : 没有时效性 ,一直存在同源下面
        -sessionStroage : 有时效性,在浏览器关闭的时候销毁
        -操作一样的
            -存 setItem();
            -获取 : getItem();
            -删除
                -删除指定 removeItem("键名");
                -删除所有 clear();
 
 

闭包

 - 函数对于外部环境的引用 ,或者说外部环境把函数包围起来;
 -闭包不会被销毁
 -闭包的特性''
     -模拟私有成员
     -占用内存 , 引用闭包的变量 设置成null 就可以了
     -缓存特性 , 变量不会被销毁的特性 ,局部变量
 

继承

 -ES5的继承
     -构造函数的继承
         -通过改变类的this到父类中去:`call() apply() bind()`
     -原型的继承
         -原型简单的赋值继承 会造成引用问题
             -深拷贝
             -通过in构造函数搭桥(组合继承)
         -覆盖原本的constructor 固有属性
             -重新让constructor 指回来
             
             
             
             
   // 原型的继承

    function Dad(name,age){
        this.name = name;
        this.age = age;
    }

    /* 
     Dad.prototype = {
         hobby:function(){
             console.log("喜欢篮球");
         }
     }
    */

    Dad.prototype.hobby = function(){
        console.log("喜欢篮球");
    }



    function Son(name,age){
        Dad.call(this,name,age); // 子类只能继承父类的构造函数;
        this.height = "178cm";
    }

    // 继承父类原型 :1.简单的赋值会出现引用问题; 2.子类的默认属性constructor 会被覆盖
    // Son.prototype = Dad.prototype;
    // 引用问题: 1.深拷贝 2.创建一个新的构造函数 来切断 子类和父类原型之间的关系
    function Link(){};
    Link.prototype = Dad.prototype;
    Son.prototype = new Link();  // 通过一个 中间的空构造函数切断2个类原型之间的关系; 组合继承;
    // 把原本的constructor 在指回来
    Son.prototype.constructor = Son;
    Son.prototype.hobby = function(){
        console.log("喜欢足球");
    }
    let son = new Son("张三",20);
    // console.log(son);
    son.hobby();


    let dad = new Dad("张三",50);
    dad.hobby();


    /* 
        let obj1 = {
            name:"张三"
        }
        let obj2 = obj1;
    
    */

/* ES5的继承 一、构造函数的继承 call 、apply 、bind 改变this指向实现继承 二、原型的继承 1.原型简单赋值的引用问题 (深拷贝,搭桥)2.constructor固有属性的覆盖问题 ,重新指回来就可以了;

*/