javascript 监听对象属性的变化
来源:互联网 发布:出奇制胜软件 编辑:程序博客网 时间:2024/05/17 07:53
许多优秀的MVVM框架都实现了数据的双向绑定。Vue.js采用监听-回调的方式来实现一向功能。监听回调的一般写法是这样的:
obj.watch(pro,function(new_value,old_value,_this){ });那么如何实现watch函数呢?Vue的实现是通过Object.defineProperty()这个函数来实现,通过定义set和get属性的,来达到改变对象的值时调用用回调函数的目的。首先我们来看一下关于Object.defineProperty()这个函数的用法:
var temperature = undefined; Object.defineProperty(obj, 'temperature', { get: function() { return temperature; }, set: function(value) { temperature = value; } });
于是,当我们执行 obj.temperature =XX时,set函数就会自动调用,这为我们执行回调函数提供了契机。
所以完整的代码实现代码如下:
var obj = {watch:function(pro,callback){if(pro in this){var old = this[pro];Object.defineProperty(this,pro,{set:function(val){var o = old;old = val;callback(val,o,this); },get:function(){return old;}});} else {throw new Error("no such property");}},toString:function(){var str = "{ ";for(pro in this){ if(typeof this[pro] !== "function" ) str += (pro + " : " + obj[pro] + ",")}str[str.length-1] = ' ';str += " }";return str;}}obj.a = 3;obj.watch("a",function(n,o,_this){ console.log("new val = " + n +"old val = " + o + " this is : " + (_this ));});obj.a = 4;以下是运行结果:
0 0
- javascript 监听对象属性的变化
- vue2.0监听数组中对象属性的变化
- dom监听属性的变化
- KVC/KVO 监听对象属性变化
- IPHONE 和 KVC/KVO 监听对象属性变化(例如:获取textView 的text的变化)
- IPHONE 和 KVC/KVO 监听对象属性变化(例如:获取textView 的text的变化)
- 利用KVO监听属性值的变化
- C#:监听类的属性变化
- UIView 监听某一个属性的变化
- vue(2) -- vue在watch中监听对象属性的变化
- JS 对象与数组的变化监听
- JS 对象与数组的变化监听
- Servlet事件监听器、监听servletContext域对象创建和销毁、监听三个域对象属性变化
- Servlet事件监听器、监听servletContext域对象创建和销毁、监听三个域对象属性变化
- wp8里监听控件自带属性的变化
- Angular中使用$watch监听object属性值的变化
- 新建对象时 属性发生的变化
- 比较两个对象的属性变化
- (第十四周项目1)验证算法(2)分块查找
- windows核心编程-线程的TLS
- 第一次用eclipse从git上下载和导入项目
- java基础备忘录
- CentOS下安装go语言编译环境
- javascript 监听对象属性的变化
- ORA-03113问题的处理过程
- storm 入门原理介绍
- vs2010 增量编译,解决编译缓慢
- css多个div横排
- Android开发艺术探索笔记(4)- 多进程模式
- Bitmap压缩
- 深度探索C++对象模型-Object Lessons
- AndroidTraining学习------Managing-the-Activity-Lifecycle-