Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >监听 javascript 对象的变化

监听 javascript 对象的变化

作者头像
用户7293182
发布于 2022-01-13 09:05:44
发布于 2022-01-13 09:05:44
3.3K00
代码可运行
举报
文章被收录于专栏:jQuery每日经典jQuery每日经典
运行总次数:0
代码可运行

这一章话题的由来,还要从一些学员的作业说起。写这篇文章主要是想让大家能从不同的角度分析问题,学习的过程中多看,多练,多想,多查,多用心。在特别多的学习网站中大部分的学习资料基本都是循规蹈矩的,例如慕课网的 javascript 入门教程中,很多讲师都讲了一些实例,而这些例子中的代码风格如出一辙,没什么新意,而且这些教程占了很大一部分比例。在这里,给大家提供另外一种思路 ------ 监听,具体代码的实现大家自己实现。也欢迎大家评论区写出不同想法。

先给出监听的概念:监听一个对象的某个属性是否发生变化,在该属性变化时立即触发制定的回调函数。

实例:购物车,想必大家肯定都接触过,那它的功能如何去实现呢?

以某宝购物车截图为例:

一、功能概述

  1. 选中商品 -- 总数,总价发生变化
  2. 增加单类商品数量 -- 总数, 总价,单类商品总价 发生变化
  3. 删除 单类商品 -- 总数总价发生变化

二、数据模型

单个商品数据模型{ischeck:是否选中, single:12, count, 2, total:24}

总商品数据模型{items:商品列表, totalCount:总数, totalPrice:总价}

三、常用逻辑

1. 点击复选框(选中单类商品),修改总数 和 总价

代码格式如下:

var singleItem = document.getElementById("复选框");singleItem.点击事件 = function(){} if(this选中){ 总数=总数+this.count; 总价=总价+this.total; } else { 总数=总数-this.count; 总价=总价-this.total; }}

四、监听模式

监听模式的另一个表达方式是观察者模式,其实并没有什么高级的。购物车这个功能用监听模式可以描述为:当修改什么的时候,什么发生变化。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
watch(item, 'isCheck',
function(newVal, oldVal, obj){
if(newVal){
all['totalCount'] = all['totalCount'] + obj['count'];
all['totalPrice'] = all['totalPrice'] + obj['total'];
} else {
...
}
});
item['isCheck'] = false;

功能其实是一样的,只不过是从“当修改什么的时候,去修改另外的什么”这种思想转变为了“当修改什么的时候,什么发生变化”。

五、相关资料

1. Object.prototype.watch()

网址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/watch

例1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var o = {p:1};
o.watch("p",function (id,oldval,newval) {
 console.log("o."+id+"由"+oldval+" 变为 "+newval);
 return newval;  
});
o.p = 2;
o.p = 3;

上面的代码显示结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
o.p 由 1 变为 2 
o.p 由 2 变为 3

警告:这个方法是非标准的,仅在Gecko中实现了,并且这方法主要是为了在调试的时候使用。

2. github上也有一些watch.js的项目,

推荐一个:https://github.com/melanke/Watch.JS

具体使用情况和对它的评价网上有不少,大家可以看一下。

3. 自己实现

上面代码中的watch方法其实是我自己手写的,粗陋代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function watch(obj, prop, callback){
  if(prop in obj){
    var old = obj[prop];
    Object.defineProperty(obj,prop, {
      enumerable: true,
      configurable: true,
      set: function(val) {
        var o=old;old=val;
        callback(val,o,obj);
      },
      get:function(){
        return old;
      }
    });
  } else {
    throw new Error("no such property: " + pro);
  }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-01-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 jQuery每日经典 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
51. Vue名称案例-使用watch监听数据变化
上一章节,我才用了监听keyup事件的方式,实现了一个名称拼接的案例。那么其中Vue框架提供一个watch组件,可以用来监听数据的变化,然后再执行相关的业务方法。
Devops海洋的渔夫
2020/08/11
1.2K0
51. Vue名称案例-使用watch监听数据变化
实战丨云开发商城小程序(附源码)
* 本文包含较多代码片段,PC端浏览推荐前往:https://cloud.tencent.com/document/product/876/70253
腾讯云开发TCB
2022/03/10
6.9K0
实战丨云开发商城小程序(附源码)
一文快速上手Vue之计算属性和侦听器,过滤器
过滤器不改变真正的`data`,而只是改变渲染的结果,并返回过滤后的版本。在很多不同的 情况下,过滤器都是有用的,比如尽可能保持 API 响应的干净,并在前端处理数据的格式。
一个风轻云淡
2022/11/15
3730
一文快速上手Vue之计算属性和侦听器,过滤器
watch.js 源码解读
用麻雀虽小五脏俱全来描述Watch.js比较合适。“观察者”模式是我们在开发的时候经常需要用到的。使用Watch.js那么我们就可以实现在“每当对象属性改变的时候,执行你的函数”。虽然有很多其他的库可以实现相同的功能,但是Watch.js却可以不改变你平时书写代码的方式,并且实现属性改变的监听功能。
mmzhou
2018/08/01
1.5K0
深入理解Vue中的计算属性与监听属性
在Vue.js这个构建用户界面的渐进式框架中,计算属性(Computed Properties)和监听属性(Watch Properties)是处理数据和响应式更新的两个核心特性。它们为开发者提供了不同的方式来操作和响应数据的变化,正确理解和合理运用这两个概念对于开发高效、可维护的Vue应用具有不可忽视的重要性。
Front_Yue
2025/01/12
2440
深入理解Vue中的计算属性与监听属性
Vue.js实战第五章练习题
购物车需要展示一个已加入购物车的商品列表,包含商品名称、商品单价、购买数量、操作等信息,还需要实时显示购买的总价。其中购买的数量可以增加或减少,每类商品可以从购物车中移除。
听城
2019/05/19
2K0
Vue核心知识:computed、methods和watch的区别
当我们改变 number 时,整个应用会重新渲染,vue 会被数据重新渲染到 dom 中。
xyzzz
2020/09/26
6.1K0
全面分析 Vue 的 computed 和 watch 的区别
computed 用来监控自己定义的变量,该变量在 data 内没有声明,直接在 computed 里面定义,页面上可直接使用。
呆呆
2021/12/01
2950
深入浅出 Vue :变化侦测
在运行时应用内部的状态会不断发生变化,需要不停地渲染。确定状态发生了什么变化通过“变化侦测”实现,一般分“推”和“拉”两种。
Cellinlab
2023/05/17
2240
vue中watch监听对象的变化_远程监听器用法
(2)把要监听的name值看作对象,利用hanler方法来进行监听。【第二种写法】
全栈程序员站长
2022/11/17
3.3K0
vue中watch监听对象的变化_远程监听器用法
浅析 Vue 的 `watch` 函数
在 Vue.js 中,响应式系统是其核心特性之一,通过它可以轻松地跟踪数据变化并自动更新视图。而 watch 函数则是 Vue 提供的一种用于监听和响应数据变化的高级方法。在这篇博客中,我们将深入探讨 watch 函数的使用方法、应用场景以及一些常见的陷阱。
繁依Fanyi
2024/07/06
3040
Vue 快速入门(四)
msg.reserseMsg依赖于 msg.message,在 msg.message 发生改变时,msg.reserseMsg也会更新。
全栈测试开发日记
2023/03/06
5740
Vue 快速入门(四)
管理数据必备;侦听器watch用法详解,vue2与vue3中watch的变化与差异
侦听器是一个在 Vue.js 框架中用于观察和响应数据变化的机制。侦听器允许开发者指定一个函数,这个函数会在特定数据变化时自动执行。Vue.js 使用侦听器来实现数据双向绑定和响应式更新。
watermelo37
2025/01/22
3110
管理数据必备;侦听器watch用法详解,vue2与vue3中watch的变化与差异
关于Vue在面试中常常被提到的几点(持续更新……
我们在业务组件中,会经常使用循环列表,当时用v-for命令时,会在后面写上:key,那么为什么建议写呢?
Vam的金豆之路
2021/11/30
1K0
关于Vue在面试中常常被提到的几点(持续更新……
Vue是怎样监听数组的变化的?
其实我们并不是要你把答案都记下来,而是把其中的思想学习到。就像你接触一个新的领域react,你也一样可以把基本思想提炼出来。
bb_xiaxia1998
2022/10/17
4770
石桥码农:20 vue计算属性和侦听器
在template里的插值表达式,如果太长,会让模板代码变得难于维护;如果有多处用到了同样的插值表达式,也不便于复用和修改。例如,这样的一个插值表达式:
LIYI
2020/02/13
7080
石桥码农:20 vue计算属性和侦听器
Vue的computed和watch的细节全面分析
fullName不可在data里面定义, 如果定义会报如下图片的错误,因为对应的computed作为计算属性定义fullName并返回对应的结果给这个变量,变量不可被重复定义和赋值
火狼1
2019/04/17
1.9K0
Vue的computed和watch的细节全面分析
[ Vue ] vue 设计原理之响应式系统实现笔记( 二 )
执行调度的实质就是将更多的控制权交给用户,比方说在执行副作用函数的时候可以让用户特定的去处理一些方法,例如回顾上一节的代码执行一个自增同时输出 status 的方法:
GavinUI
2022/08/19
7320
[ Vue ] vue 设计原理之响应式系统实现笔记( 二 )
Vue成神之路之选项
vue.js——开发版本:包含完整的警告和调试模式 vue.min.js——生产版本:删除了警告,进行了压缩
小胖
2018/12/13
3.1K0
开发|走进小程序(三)
前一篇博客为大家简单的讲解了一下关于一个简单的电商小程序的首页和分类页面的制作。这篇博客呢,继续为大家讲解后面搜索页、详情页、购物车页面的制作。
算法与编程之美
2019/07/17
9000
推荐阅读
相关推荐
51. Vue名称案例-使用watch监听数据变化
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验