仿写Vue八、添加数组的方法

本文介绍了一种使数组方法响应式的技术,通过重写数组的七个关键方法,如push、pop等,确保在操作数组时能保持数据的响应式状态。文章详细解释了获取数组原型对象的过程,以及如何通过覆盖方法实现对新增数据项的响应式处理。

八、添加数组的方法

自己动手实践,就会更加深刻的理解**”**

这次处理数组的七个方法,使其成为响应式。

01、获取数组原型对象


重写每一个函数不现实,所以打算先获取数组的原型对象,然后生成一个新的对象来继承此原型对象,这个新的对象就拥有数组的一切属性方法,且不会对原生的数组产生任何影响。

/** 
* 对与响应式数组,我们需要重写其一些方法,例如 push、pop 
* 保证响应式数组使用这些方法之后依然是响应式的。 
*/
const arrProto = Array.prototype;
const arrMethods = Object.create(arrProto);

02、重写方法


我们需要覆盖七个方法:

const methodsToPatch = [  'push',  'pop',  'shift',  'unshift',  'sort',  'reverse',  'splice',]
    对于 **push, pop, splice**,响应式数组唯一不同的地方在于,对于往数组新加的数据项,需要保证其仍然是响应式的。其他的方法,要么是更改数据的位置,要么是删除某些数据,都不需要额外的处理,只需调用原来的方法即可。
function def(obj, key, val, enumerable) {
  Object.defineProperty(obj, key, {
    value: val,
    enumerable: !!enumerable,
    configurable: true,
    writable: true,
  })
}

methodsToPatch.forEach(method => {
  const original = arrMethods[method];
  def(arrMethods, method, function mutate() {
    console.log('调用的方法是:', method);
    
    let args = [], len = arguments.length;
    while (len--) args[len] = arguments[len];
    const result = original.apply(this, args);
    let inserted;
    const ob = this.__ob__;
    switch(method) {
      case 'push':
      case 'unshift':
        inserted = args; break;
      case 'splice':
        inserted = args.slice(2); break;
    }
    // 如果有新增的数据,则每个数据都将其响应式化
    if (inserted) {
      ob.observeArray(inserted);
    }
    return result;
  })
})

03、效果图


数据初始化:

    const data = {
      name: 'romeo',
      message: 'wants to be rich',
      deep: {
        firstLevel: {
          secondLevel: 'here!'
        }
      },
      arr: [
        { name: 'jack1' },
        { name: 'jack2' },
        { name: 'jack3' },
      ]
    }

在这里插入图片描述
可以看到 arr 中确实拥有了第四项,且同样是响应式的。

源代码在github上,请点击阅读原文查看~

在这里插入图片描述

热成像人物检测数据集一、基础信息数据集名称:热成像人物检测数据集图片数量:训练集:424张图片验证集:121张图片测试集:61张图片总计:606张热成像图片分类类别:- 热成像人物:在热成像图像中的人物实例- 非热成像人物:在非热成像或普通图像中的人物实例,用于对比分析标注格式:YOLO格式,包含边界框和类别标签,适用于目标检测任务。数据来源于热成像和视觉图像,覆盖多种场景条件。二、适用场景热成像监控与安防系统开发:数据集支持目标检测任务,帮助构建能够在低光、夜间或恶劣环境下自动检测和定位人物的AI模型,提升监控系统的可靠性和实时响应能力。红外视觉应用研发:集成至红外摄像头或热成像设备中,实现实时人物检测功能,应用于安防、军事、救援和工业检测等领域。学术研究与创新:支持计算机视觉与热成像技术的交叉研究,助力开发新算法用于人物行为分析或环境适应型检测模型。教育与培训:可用于高校或培训机构,作为学习热成像人物检测和AI模型开发的教学资源,提升实践技能。三、数据集优势精准标注与多样性:每张图片均由专业标注员标注,确保边界框定位准确,类别分类清晰。包含热成像和非热成像类别,提供对比数据,增强模型的泛化能力和鲁棒性。场景实用性强:数据覆盖多种环境条件,如不同光照和天气,模拟真实世界应用,适用于复杂场景下的人物检测任务。任务适配性高:YOLO标注格式兼容主流深度学习框架(如YOLOv5、YOLOv8等),可直接加载使用,支持快速模型开发和评估。应用价值突出:专注于热成像人物检测,在安防、监控和特殊环境检测中具有重要价值,支持早期预警和高效决策。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的桐人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值