zoukankan      html  css  js  c++  java
  • JS的prototype的共享机制分析

    function Super(){
    }
    Super.prototype.aaa=[1,2,3];
    Super.prototype.bbb=1;
    
    function Sub(){
        Super.call(this);
    }
    Sub.prototype=new Super();
    Sub.prototype.constructor=Sub;
    
    var a=new Sub();
    var b=new Sub();
    
    a.bbb=5;  //当这句话执行的时候,并不是操作prototype上的bbb,而是给a对象添加了一个bbb属性
    alert(a.bbb);  //这里弹出的是刚才添加的bbb属性,因为已经找到刚才添加的了,所以不会在prototype上找了
    delete a.bbb;  //删除了刚才添加的bbb属性
    alert(a.bbb);  //这下就能弹出prototype上的bbb了
    
    a.aaa[0]=5;  //而这句话就不一样了,并不是创建aaa属性,而是修改prototype上的aaa[0]。通过语法可以看出
    alert(b.aaa[0]);  //那么b对象也会受影响,会弹出5
    a.aaa=[];  //而这里也是创建了一个aaa属性,并不会修改prototype的aaa
    alert(b.aaa[1]);  //不会受到上一句的影响,会弹出prototype上的aaa[0]即数字2
    a.aaa[0]=9;  //这里也不一样了,因为上面在a对象上直接创建了个aaa数组,所以是修改的上面刚创建的aaa,而不是prototype上的
    alert(a.aaa[0]);  //这里会弹出9
    alert(b.aaa[0]);  //这里会弹出5
  • 相关阅读:
    luogu2253 好一个一中腰鼓!
    luogu2948 滑雪课
    luogu1556 幸福的路
    luogu1900 自我数
    luogu1632 点的移动
    luogu1999 高维正方体
    树状数组模板
    杜教筛
    [比赛|考试] 9月第一周的考试
    历年NOIP真题总结
  • 原文地址:https://www.cnblogs.com/3body/p/5417309.html
Copyright © 2011-2022 走看看