• js---15深拷贝浅拷贝 原型链


    //&&得到的结果不是布尔类型,如果前面都是 true就执行最后一个,并返回最后一个表达式的值,前面有一个为false,后面不执行,返回前面表达式的值
    var a = 3;
    var b = a && (a = 4);
    console.log(b);//4
    var b = a && (a ++);
    console.log(a);//5
    console.log(b);//4
    a && (a ++);
    console.log(a);//6
    
    var c = 0;
    var d = c && a++;
    console.log(a);//6
    console.log(d);//0
    
    var c = 0;
    var d = b && c && a++;
    console.log(a);//6
    console.log(d);//0
    
    var c = false;
    var d = b && c && a++;
    console.log(a);//6
    console.log(d);//false
    
    // || 前面是true,后面不执行,返回前面表达式值。前面是false,返回后面表达式的值
    var a1 = 3;
    var b1 = a1 || a1++;
    console.log(a1);//3
    console.log(b1);//3
    
    var a1 = 0;
    var b1 = a1 || a1++;
    console.log(a1);//1
    console.log(b1);//0
    
    ====================================================================
    //浅拷贝,指向同一个内存区域
    var person ={
         name:"cj",
         age:22,
         address:{
             home:"home address",
             office:"office address"
    
         },
         schools:["xiaoxue","daxue"]
     };
    var programer = {
         language:"javascript"
     };
    //全部复制
    function  extend (p,c) {
         var c = c ||{}; //如果c是undefined或者null,就是{}
         for(var prop in p){
             c[prop] = p[prop];//如果有属性值是对象,则是把地址复制过去了,
         }
    }
    extend(person,programer);
    console.log(programer.address);//{home: "home address", office: "office address"}
    console.log(programer.address.home);//home address
    console.log(programer.schools);//["xiaoxue", "daxue"]
    programer.name = "sss";
    console.log(person.name);//cj
    programer.address.name = "xxx";
    console.log(person.address.name);//xxx
    programer.schools[0] = "iii";
    console.log(person.schools[0]);//iii
    console.log(person.schools[0]);//iii
    
    
    =====================================================
    //深拷贝,跟父类没关系了
    function extendDeeply(p,c){//from --> to 
         var c = c|| {};
         for(var prop in p){//{}形式的对象可以用for in循环,prop是key,p[prop]是每一个value。json和数组都可以用for in循环,数组时候prop是0,,1,2,3,json时候prop是key
             if(typeof p[prop] === "object"){
                 c[prop] = (p[prop].constructor ===Array)?[]:{};//c[address]={}
                 extendDeeply(p[prop],c[prop]);//p[address],c[address]
                
             }else{
                 c[prop] = p[prop];//给c新增一个key和value,c[address][home]=p[address][home]
             }
    
        }
    }
    
    ================================================================
    function Parent(){
          this.name = "abc";
          this.address = {home:"home"};
    }
    function Child(){//可以看成类,对象,构造函数,函数执行是相当于构造函数执行但是要return function才产生对象。
         Parent.call(this);//this就有了Parent的属性了,深拷贝
          this.language = "java";
    }
    var c = new Child();
    c.address.home = "ssss"
    var p = new Parent();
    console.log(p.address.home);//home
    =================================================================
        //原型链;java里面的继承关系,一直找到Object类去
        var p ={name:"cj"};
        function myCreate(p){
            var ins ;
            function F(){};
            F.prototype = p;//函数的原型指向p对象,函数公有区域指向p对象,所以ins.__proto__指向p对象,就实现了继承。
            ins =  new F();
            return ins ;
        }
    //对象的__proto__ 指向的是
    //对象的构造器constructor
    //的原型对象(prototype)
    
    //但原型对象并不是能用上面的话来说明
    //原型对象的__proto__指向的是Object得prototype
    //而不是指向
    //其(Object.prototype)构造器constructor ==某个函数
    //的原型对象

       function FF(){};
       var ff = new FF(){};
       ff.__proto__ === FF.prototype;//true
        ff.__proto__  === ff.constructor.prototype;  //true
        FF.prototype.__proto__ ===FF.prototype.constructor.prototype; //false

  • 相关阅读:
    GitLab 远程 定时备份
    GitLab 本地 定时备份
    MATLAB格式化输出控制
    hilbert矩阵
    MATLAB符号运算
    双线性插值 分类: 图像处理 2015-07-28 15:14 7人阅读 评论(0) 收藏
    shamir叠像术 分类: 图像处理 2015-07-08 16:50 17人阅读 评论(1) 收藏
    cookies、sessionStorage和localStorage解释及区别
    微信小程序,组件之间带参数跳转+轮播图+冒泡事件+表单提交
    微信小程序,头部和底部设置需要注意的事项
  • 原文地址:https://www.cnblogs.com/yaowen/p/6848880.html
Copyright © 2020-2023  润新知