js 实现watch监听数据变化的代码
更新时间:2019年10月13日 10:58:21 作者:曾经的水哥
这篇文章主要介绍了js 实现watch监听数据变化的代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
1.js
/** * @desc 属性改变监听,属性被set时出发watch的方法,类似vue的watch * @author Jason * @study https://www.jianshu.com/p/00502d10ea95 * @data 2018-04-27 * @constructor * @param {object} opts - 构造参数. @default {data:{},watch:{}}; * @argument {object} data - 要绑定的属性 * @argument {object} watch - 要监听的属性的回调 * watch @callback (newVal,oldVal) - 新值与旧值 */ class watcher{ constructor(opts){ this.$data = this.getBaseType(opts.data) === 'Object' ? opts.data : {}; this.$watch = this.getBaseType(opts.watch) === 'Object' ? opts.watch : {}; for(let key in opts.data){ this.setData(key) } } getBaseType(target) { const typeStr = Object.prototype.toString.apply(target); return typeStr.slice(8, -1); } setData(_key){ Object.defineProperty(this,_key,{ get: function () { return this.$data[_key]; }, set : function (val) { const oldVal = this.$data[_key]; if(oldVal === val)return val; this.$data[_key] = val; this.$watch[_key] && typeof this.$watch[_key] === 'function' && ( this.$watch[_key].call(this,val,oldVal) ); return val; }, }); } } // export default watcher;
2.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>wathc</title> </head> <body> <script src="./watch.js"></script> <script> let wm = new watcher({ data:{ a: 0, b: 'hello' }, watch:{ a(newVal,oldVal){ console.log(newVal, oldVal); // 111 0 } } }) wm.a = 111 </script> </body> </html>
3. 给vm.a 从新赋值 就能看到 newVal 和oldVal的变化
总结
以上所述是小编给大家介绍的js 实现watch监听数据变化的代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
相关文章
JavaScript字符串String和Array操作的有趣方法
字符串和数组在程序编写过程中是十分常用的类型,因此程序语言都会将String和Array作为基本类型,并提供许多字符串和数组的方法来简化对字符串的操作2012-12-12发布BlueShow v1.0 图片浏览器(类似lightbox)blueshow.js 打包下载
发布BlueShow v1.0 图片浏览器(类似lightbox)blueshow.js 打包下载...2007-07-07JavaScript setInterval()与setTimeout()计时器
这篇文章主要介绍了JavaScript setInterval()与setTimeout()计时器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-12-12
最新评论