Loading [MathJax]/jax/input/TeX/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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Micron(美光)内存颗粒的命名规则,7lk17d9PTK,MT29F2G08ABAEA(矿机自带)
三四十买了一个矿机主板,ddr3的芯片和flash的型号认不全,找了一些资料,如下
全栈程序员站长
2022/06/25
4.3K0
Micron(美光)内存颗粒的命名规则,7lk17d9PTK,MT29F2G08ABAEA(矿机自带)
英特尔至强6独享MRDIMM,内存带宽飙升,加速推理达2.4倍!
之前的文章中,有业者预测至强6性能核处理器每颗计算单元芯片中的内核数量为43,加上每个计算单元有两组双通道内存控制器各占一个网格,那么总共占用43+2=45个网格,可以由5×9的布局构成。
新智元
2025/02/15
1690
英特尔至强6独享MRDIMM,内存带宽飙升,加速推理达2.4倍!
详细说一下服务器内存和显存是怎么计算的
早期内存通过存储器总线和北桥相连,北桥通过前端总线与CPU通信。从Intel Nehalem起,北桥被集成到CPU内部,内存直接通过存储器总线和CPU相连。
用户6953509
2020/02/12
6.9K0
电脑硬件详解篇:内存条
内存条的作用 我们的系统,软件,游戏都是存放在硬盘里的, 那么内存是用来做什么的呢? 通俗的说,内存相当于一座桥梁,用以负责诸如硬盘、主板、 显卡等硬件上的数据与处理器之间数据交换处理。 所有电脑
简单并不简单
2019/08/23
2.2K0
电脑硬件详解篇:内存条
DRAM:实现国产可替代的愿望挺难的
如今,“1bit只要1美元”的厂商早已退出DRAM市场, “三分天下”的局面难以打破,国产内存的希望如星星之火,尚不可燎原。
AI 电堂
2021/08/23
1K0
DRAM:实现国产可替代的愿望挺难的
硬件介绍CPU显卡内存[通俗易懂]
一,CPU主频: 这是一个最受新手关注的指标,指的就是CPU内核工作的时钟频率(CPU Clock Speed)。通常所说的某款CPU是多少兆赫兹的,而这个多少兆赫兹就是“CPU的主频”。在学校经常听见一些人问,XXX网吧的CPU2.66G!XXX网吧的才2G,有人用2.66G的赛扬与2.0G-2.66G的P4比,这是无知的表现,和他们争是无意义的:)。主频虽与CPU速度有关系,但确对不是绝对的正比关系,因为CPU的运算速度还要看CPU流水线(流水线下面介绍)的各方面性能指标(缓存、指令集,CPU位数等)。因此主频不代表CPU的整体性能,但提高主频对于提高CPU运算速度却是至关重要的。主频的计算公式为:主频=外频*倍频。
全栈程序员站长
2022/08/31
2K0
视频 | ZYNQ开发板深度评测:高性能FPGA和双核ARM的强强联合!
这是我第一次在公众号发布评测视频,之前也没做过视频,从录视频、剪辑、渲染真的是太麻烦了,PR咱也不会,用的是剪映,初次尝试,以开发板评测为主题,一共剪了两段,一个是模仿iPhone7 快闪107秒产品发布视频,40秒的视频周末剪了一上午。第二段是完整的开发板开箱评测视频,14分钟时长,我嫌太麻烦,中间几乎没有剪辑,如果觉得视频内容太长,可以看下后面的文字评测内容,要比视频介绍更详细。 初次录视频,大家多多支持。 视频1:开发板评测快闪 http://mpvideo.qpic.cn/0bc3xiaas
单片机点灯小能手
2022/12/18
4.3K0
视频 | ZYNQ开发板深度评测:高性能FPGA和双核ARM的强强联合!
《计算机网络》谢希仁第七版课后答案完整版[通俗易懂]
答: (1)电路交换:端对端通信质量因约定了通信资源获得可靠保障,对连续传送大量数据效率高。 (2)报文交换:无须预约传输带宽,动态逐段利用传输带宽对突发式数据通信效率高,通信迅速。 (3)分组交换:具有报文交换之高效、迅速的要点,且各分组小,路由灵活,网络生存性能好。
全栈程序员站长
2022/08/01
5.6K0
Banana Pi BPI-R4 最新Wi-Fi 7 路由开发板 ,2x10G SFP,支持 OpenWrt
由Sinovoip开发的著名Banana Pi品牌刚刚发布了新款Banana Pi BPI-R4路由器主板,与之前的Banana Pi R3型号相比,其规格显着升级。
Banana Pi 开源硬件
2024/05/13
7650
Banana Pi BPI-R4 最新Wi-Fi 7 路由开发板 ,2x10G SFP,支持 OpenWrt
个人计算机硬件设备配置介绍与选型参考
描述:在我们日常使用的计算机中除了需要有硬件支持,还需要要有软件支持,比如我们的操作系统; 在我们自己安装系统或者DIY笔记本电脑的时候需要购买一些PC的一些周边硬件,当然您需要对其有一个大致的了解,所以本篇文章给计算机小白们一个基础入门;
全栈工程师修炼指南
2022/09/28
3.4K0
个人计算机硬件设备配置介绍与选型参考
ddr2 odt_ddr2电压
经常有人会说支持DDR2的主板存在偷工减料的现象。事实上这是由于DDR2内存中使用了一项新的ODT技术,它可以在提高内存信号稳定性的基础上 节省不少电器元件。主板终结是一种最为常见的终结主板内干扰信号的方法。在每一条信号传输路径的末端,都会安置一个终结电阻,它具备一定的阻值可以吸收反 射回来的电子。但是目前DDR2内存的工作频率太高了,这种主板终结的方法并不能有效的阻止干扰信号。若硬要采用主板终结的方法得到纯净的DDR2时钟信 号会花费巨额的制造成本。
全栈程序员站长
2022/09/30
1.6K0
【STM32H7】第8章 ThreadX GUIX移植到STM32H7(MDK AC6)
最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=98429 第8章 ThreadX GUIX移植到STM32H7(MDK AC6)
Simon223
2020/12/01
9510
【STM32H7】第8章   ThreadX GUIX移植到STM32H7(MDK AC6)
深度报告:“数据革命”终极方向是人工智能,金融/汽车最快落地
【新智元导读】移动互联红利正在消退,数据红利才刚刚开始。全球数据量爆发,基于海量数据深度学习的人工智能第三次浪潮可能走得更远。 “数据”+“人工智能”将成为未来5-10年的科技投资主线。前瞻研究首席分析师许英博带来当下中国人工智能行业发展态势的深度分析,涵盖数据、计算、应用各个视角。报告认为,“数据革命”终极方向是人工智能,金融/汽车最快落地。 作者:许英博,前瞻研究首席分析师,毕业于清华大学汽车工程系,2007年进入中信证券研究部,新财富金牌分析师。 机遇:“数据”+“人工智能”将成未来科技投资主线 互
新智元
2018/03/27
2K0
深度报告:“数据革命”终极方向是人工智能,金融/汽车最快落地
Windows操作系统基础
行业介绍 操作系统:Linux系统 Windows系统 Linux系统是80%企业使用的服务器,Windows更适合个人电脑。 为什么企业都用Linux系统:①开源 ②免费 ③安全 ④稳定
张哥编程
2024/12/13
1880
电气设计心得体会_原理图设计规范
本博客将简述中兴通讯股份有限公司在原理图设计中需要注意的一些事项,其中包含了中兴设计开发部积累的大量硬件开发知识和经验,可以作为学习使用。硬件工程师可以学习并掌握检查条目的内容以及对条目的详细说明,学习部门经验。
全栈程序员站长
2022/10/29
1.5K0
电气设计心得体会_原理图设计规范
重磅!中国移动十大产业合作科技成果
日前,中国移动开展了“科技大盘点”活动,评选“十大最具影响力产业链合作科技创新成果”及“十大未来技术方向”。
悲了伤的白犀牛
2022/12/14
2.3K0
硬件资料和软件资料_电脑硬件检测工具哪个好
2. BIOS报警声意义 3. BIOS自检与开机故障相关问题 5. 计算机几个常见指标的意义 6. 显卡GPU参数 7. 显示卡常见故障全面解决 8. 集成声卡常见故障及解决 9. 显示器经典故障以及处理办法 10. AMI主板代码大全(BIOS-ID)
全栈程序员站长
2022/11/01
4.9K0
重构区块链
撰写这篇手册,并不简单的因为区块链是一个热门话题,更因为随着研究的深入,你会发现这是一个相当复杂的领域。关于这一话题的信息来源无外乎三个方面:技术文档和代码,商业机构的宣传,研究机构或个人的整理。但是每一种媒体都因其形式、渠道或作者而带有某种偏见。技术文档固然详细精确,但是不够通俗,视野也不够广阔;商业宣传必定带有一定的偏向性;而看似中立的研究机构和媒体也因其背后资助方或者受众市场的差异而显现出意识形态的不同。区块链领域的技术人员喜欢强调其技术领先性,但偏偏这一领域在学术界还没有一致的评判标准。区块链商业机构流行的白皮书,只有极少数既保留了技术细节,又蕴含对整个体系的理解。媒体和研究机构里则存在一种悖论,那些对区块链理解不够深,但是想象力丰富的人,率先推出了所谓的畅销书,只能让普通人初步理解一些浅层的知识,无法用来灵活运用和价值创造。只有那些深入区块链一线的研究员才会意识到,这个领域还处在高速变化期,很多东西都没有定性,出书立著为时尚早。
全栈程序员站长
2022/07/23
10K0
重构区块链
推荐阅读
相关推荐
Micron(美光)内存颗粒的命名规则,7lk17d9PTK,MT29F2G08ABAEA(矿机自带)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验