首页 > 其他分享 >对象模式

对象模式

时间:2022-08-25 08:22:56浏览次数:45  
标签:obj 对象 模式 原型 new 构造函数 属性

工厂模式

构造函数

  • 就是普通函数,只不过首字母要大写,内部写this,环境指向被实例化的对象
  • 实例化:把某个变量,通过new构造函数变成了一个对象
  • 数组,字符串等都是构造函数

原型模式

  • js中所有数据类型都是对象
  • new后面跟的不是类,是构造函数,(new的缺点)无法共享属性和方法
  • prototype 属性的引入
    共享的放到prototype 中,不共享的放到构造函数中
    函数拥有prototype 属性
  • 写法

函数和对象的关系

  • new一个函数,就会实例化一个对象
  • 函数
    拥有prototype
  • 对象
    拥有_proto_

new做了什么

  1. 创建一个对象
  2. 原型赋值(指向一个共同的原型对象)
  3. 改变this指向,原来是window,现在是指向对象

封装一个对象深拷贝

浅拷贝

只复制一层对象,当对象的属性是引用类型时,实际上复制的其引用,当引用指向的值发生变化时,原对象的属性值也会跟着变化,互相影响


或者是

assign合并

深拷贝

在拷贝的时候创建新的对象,并把原对象所有的属性都深拷贝到新对象,原属性如果是对象,也会创建新的对象并拷贝到新对象属性中,这样旧对象和新对象就是互相独立的,互不影响。

  1. JOSN.parse() + JOSN.stringify()
  2. 递归
<script>
      var obj = {
        a: 1,
        b: {
          a: "你好",
        },
      };

      function fun(obj) {
        var m = {};
        if (typeof obj == "object") {
          for (var k in obj) {
            if (obj.hasOwnProperty(k)) {
              if (typeof obj[k] == "object") {
                m[k] = fun(obj[k]);
              } else {
                m[k] = obj[k];
              }
            }
          }
        }
        return m;
      }
      var obj1 = fun(obj);
      console.log(obj1.b.a);
      console.log(obj.b.a);
    </script>

原型链:每一个对象都有原型,还有属于自己的原型,最终形成原型链

原型的目的:继承,让对象的属性和方法实现共享

  • 函数 prototype
  • 对象 proto
  • 如果压迫查找对象的属性或者方法,要去对象中查找
    =>去对象的原型中查找==>去当前对象的原型的原型中查找=>......找不到返回 undifined
    从最外层往原型链最深处找

继承


被new的是父亲,相当于父元素指向了child中的原型对象

标签:obj,对象,模式,原型,new,构造函数,属性
From: https://www.cnblogs.com/zongkm/p/16622856.html

相关文章

  • 设计模式之组合模式
    本文通过老王和小王探讨书房、书架、各类书的管理问题,引出结构型设计模式家族中的一个重要成员——组合模式,本文会给予两种组合模式的典型代码实现,为了加深理解会在第三部......
  • 你有对象类,我有结构体,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang结构体(struct)的
    再续前文,在面向对象层面,Python做到了超神:万物皆为对象,而Ruby,则干脆就是神:飞花摘叶皆可对象。二者都提供对象类操作以及继承的方式为面向对象张目,但Golang显然有一些特立独......
  • 微信公众号天气推送(快写给你的对象)
    下载项目https://gitee.com/toyan/wechat-official-account-push/tree/master/下载那个压缩包就好https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showin......
  • 第十五章 面向对象编程OPP随笔
    面向对象编程的三个核心为数据抽象、继承和动态绑定。继承:派生类需要通过派生列表指明它从哪个或哪几个基类继承过来,这样,派生类将继承基类的所有成员(多继承将继承多个基......
  • 设计模式 23 访问者模式
    参考源https://www.bilibili.com/video/BV1u3411P7Na?p=31&vd_source=299f4bc123b19e7d6f66fefd8f124a03访问者模式(VisitorPattern)属于行为型模式概述生活中经常......
  • clash TUN模式
    clashTUN模式简介Tun模式可以通过新建一个Tun虚拟网卡接受操作系统的三层流量,从而拓展Clash入口(inbound)转发能力。Tun模式有以下潜在的优点:提升Clash处理U......
  • ts数组对象根据某个属性进行分组
    asyncgroupBy(sortData:OrderItem[]){constarr=(array:OrderItem[],f:Function)=>{constgroups:{[key:string]:OrderItem[],......
  • Redis集群模式搭建
    Redis主要有三种集群方案:主从模式哨兵模式集群模式集群模式搭建Redis3.0版本之后才可用,推荐3主3从集群模式。1.启动6台Redis配置文件如下,redis_7002.conf...类......
  • 面向过程和面向对象
    面向过程(ProcedureOriented简称PO)把事情拆分成一个个的方法和数据,然后按照一定的顺序,执行完这些方法,等方法执行完了,事情就搞定了。(因为每个方法都可以看作一个过......
  • 设计模式 22 策略模式
    参考源https://www.bilibili.com/video/BV1u3411P7Na?p=30&vd_source=299f4bc123b19e7d6f66fefd8f124a03策略模式(StrategyPattern)属于行为型模式概述生活中会面......