iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >Vue Array变异方法怎么实现
  • 785
分享到

Vue Array变异方法怎么实现

2024-04-02 19:04:59 785人浏览 八月长安
摘要

本篇内容介绍了“Vue Array变异方法怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、前言在

本篇内容介绍了“Vue Array变异方法怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、前言

在"模拟Vue之数据驱动3"中,我们实现了为每个对象扩展一个$set方法,用于新增属性使用,这样就可以监听新增的属性了。

当然,数组也是对象,也可以通过$set方法实现新增属性。

但是,对于数组而言,通常我们是通过push之类的方法吧。

PS:Vue中明确指出push、pop、shift、unshift、splice、sort、reverse方法为变异方法,可以通过它们监听属性变化,触发视图更新

注:我们将Array变异方法实现,也写在extendObj.js中的,因为数组也是对象嘛。

二、Array变异方法实现

要实现这些变异方法,毫无疑问,我们会重写它们,那在Array.prototype里面重写吗?

当然不是,这样不就影响了所有数组对象的原型链了么!

为了避免这种情况,且,我们只是想在监听数据对象上继承这些变异数组方法,那么细心的你会发现,其实与我们在"模拟Vue之数据驱动3"中实现$set方法类似了。

首先,我们创建arrKeys对象用于保存需要变异的数组方法以及恒定对象extendArr,如下:

let arrKeys = ['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse'];const extendArr = [];

接着,就是在extendArr对象上,一一监听arrKeys中的方法了,与$set方法类似,整体结构如下:

!function(){ arrKeys.forEach(function(key){ proxyObject(extendArr, key, function(){ //TODO }); });}();

注:proxyObject方法其实核心就是Object.defineProperty,详见"模拟Vue之数据驱动3".

接下来,就是实现核心部分代码了,重写这些方法的目的,是为了监听数据变化,所以要在方法原有功能不变的情况下,重写它们,Array.xxx.apply即可实现原有功能。

且,push、unshift、splice这三个方法可以在原数组中,新增属性,故而,我们需要监听新增属性以及它们的属性值,这里就和$set方法完全一样了,通过$Observer,即可利用observe以及convert方法实现了。

实现代码如下:

!function(){ arrKeys.forEach(function(key){ proxyObject(extendArr, key, function(){ console.log('Fun ' + key + ' is observed'); let result; let arrProto = Array.prototype; let ob = this.$Observer; let arr = arrProto.slice.call(arguments); let inserted; let index; switch(key){ case 'push': { inserted = arr; index = this.length; break; } case 'unshift': { inserted = arr; index = 0; break; } case 'splice': { inserted = arr.slice(2); index = arr[0]; break; } } result = arrProto[key].apply(this, arguments); if(inserted){ inserted.forEach(val => { ob.observe(val); ob.convert(index++, val); }); } return result; }); });}();

最后,就是在需要监听的对象上继承这些变异方法咯,如下:

//observer.jsfunction Observer(data){ if(!(this instanceof Observer)){ return new Observer(data); } data.__proto__ = extendObj; //继承变异方法push、pop等等 if(Array.isArray(data)){ data.__proto__.__proto__ = extendArr; } this.data = data; this.walk(data); }

好了,一切完毕,接下来就测试下呗:

<script src="./extendObj.js"></script><script src="./observer.js"></script><script> 'use strict'; let data = { msg: [5, 2, 0], user: { name: 'Monkey', age: 24 }, lover: { name: 'Dorie', age: 23 } }; Observer(data);</script>

“Vue Array变异方法怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Vue Array变异方法怎么实现

本文链接: https://www.lsjlt.com/news/88736.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue Array变异方法怎么实现
    本篇内容介绍了“Vue Array变异方法怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、前言在...
    99+
    2024-04-02
  • JavaScript Array push()方法怎么用
    JavaScript中的Array对象有一个push()方法,用于向数组的末尾添加一个或多个元素,并返回新数组的长度。语法:arra...
    99+
    2023-10-11
    JavaScript
  • Python同步方法怎么变为异步方法
    本文小编为大家详细介绍“Python同步方法怎么变为异步方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python同步方法怎么变为异步方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。背景在我们平时的Fas...
    99+
    2023-06-29
  • Vue公共方法怎么实现
    这篇文章主要介绍“Vue公共方法怎么实现”,在日常操作中,相信很多人在Vue公共方法怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue公共方法怎么实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-07-06
  • Vue动态组件实现异常处理方法
    动态组件有两种常用场景: 一是动态路由: // 动态路由 export const asyncRouterMap: Array<RouteRecordRaw> = [ ...
    99+
    2023-02-01
    Vue动态组件 Vue动态组件异常处理
  • Vue中的Vue.nextTick的异步怎么实现
    这篇文章主要介绍“Vue中的Vue.nextTick的异步怎么实现”,在日常操作中,相信很多人在Vue中的Vue.nextTick的异步怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue中的Vue....
    99+
    2023-06-29
  • Vue Axios的异步通信怎么实现
    这篇文章主要介绍了Vue Axios的异步通信怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue Axios的异步通信怎么实现文章都会有所收获,下面我们一起来看看吧。1.什么是AxiosAxios是一...
    99+
    2023-06-29
  • vue元素样式实现动态改变方法介绍
    目录1 前言2 动态改变样式的方法2.1 操作元素class列表2.2 操作元素内联样式3 小结1 前言   在vue项目中,很多场景要求我们动态改变元素的样式,...
    99+
    2024-04-02
  • vue怎么实现数字变换动画
    今天小编给大家分享一下vue怎么实现数字变换动画的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。UI图数字部分如下:emmm。...
    99+
    2023-06-30
  • Vue 中怎么实现全局变量和局部变量
    本篇文章为大家展示了Vue 中怎么实现全局变量和局部变量,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。局组件和局部组件1.先定义组件   Vue...
    99+
    2024-04-02
  • javascript实现异步的方法
    这篇文章给大家分享的是有关javascript实现异步的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。javascript实现异步的方法:1、使用setTimeout方法;2、使用setImmediate 方...
    99+
    2023-06-14
  • Vue中怎么实现一个异步组件
    今天就跟大家聊聊有关Vue中怎么实现一个异步组件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。index.html<!DOCTYPE ...
    99+
    2024-04-02
  • vue怎么实现diff算法
    这篇文章主要介绍“vue怎么实现diff算法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue怎么实现diff算法”文章能帮助大家解决问题。 模块路径:src\...
    99+
    2024-04-02
  • Vue实现MVVM的方法是什么
    今天小编给大家分享一下Vue实现MVVM的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. Object.def...
    99+
    2023-07-04
  • vue数字金额动态变化功能实现方法详解
    目录1 前言2 数字动态滚动2.1 计时器实现2.2 动画帧实现3 总结1 前言   在某些场景中,要求我们能够动态与用户进行交互,如页面加载一个数字的时候,动态...
    99+
    2024-04-02
  • CSS3中渐变的实现方法
    本篇内容主要讲解“CSS3中渐变的实现方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CSS3中渐变的实现方法”吧!1、线性渐变语法:background: ...
    99+
    2024-04-02
  • C#怎么实现Array,List,Dictionary相互转换
    这篇文章主要介绍“C#怎么实现Array,List,Dictionary相互转换”,在日常操作中,相信很多人在C#怎么实现Array,List,Dictionary相互转换问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-06-30
  • 怎么用Vue方法实现简单的计时器
    这篇文章主要讲解了“怎么用Vue方法实现简单的计时器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Vue方法实现简单的计时器”吧!Vue简单的计时器,供大家参考,具体内容如下原理:se...
    99+
    2023-06-20
  • 浅析Vue公共方法的实现方法
    Vue是一款流行的JavaScript框架,开发者可以使用这个框架来快速构建用户界面。在Vue中,公共方法是非常重要的组成部分。本篇文章将介绍Vue公共方法。在Vue中,公共方法可以是全局方法或实例方法。全局方法是挂载在Vue对象上的方法,...
    99+
    2023-05-14
  • C#使用Task实现异步方法
    目录一、async和await特性的结构1. 异步和同步2.async和await二、什么是异步方法1.异步方法的结构2.异步方法三种返回类型理解3.异步方法的控制流三、await表...
    99+
    2023-05-14
    C# Task异步 C# 异步
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作