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
  • 相关阅读:
    pyecharts学习
    反爬
    pandas
    用 pymongo 操作 MongoDB 数据库
    数据库隔离级别---读未提交,读已提交,重复读,序列化
    vscode 配置c++和python编译和调试环境
    sublime Text3 配置c++编译环境并设置快捷键
    GIT学习笔记
    redis单节点部署
    二元多项式求逆中的小坑
  • 原文地址:https://www.cnblogs.com/3body/p/5417309.html
Copyright © 2011-2022 走看看