javascript 监听对象属性的变化
2016-12-01 11:16
585 查看
许多优秀的MVVM框架都实现了数据的双向绑定。Vue.js采用监听-回调的方式来实现一向功能。监听回调的一般写法是这样的:
于是,当我们执行 obj.temperature =XX时,set函数就会自动调用,这为我们执行回调函数提供了契机。
所以完整的代码实现代码如下:
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;以下是运行结果:
相关文章推荐
- Rudolph javascript 监听简单对象属性的变化 -- 回调函数的应用
- KVC/KVO 监听对象属性变化
- 监听 javascript 对象的变化
- Servlet事件监听器、监听servletContext域对象创建和销毁、监听三个域对象属性变化
- Object.defineProperty 监听对象属性变化
- vue.js 中如何监听watch:{}对象中的某个属性的变化,做相应的操作
- vue2.0监听数组中对象属性的变化
- vue(2) -- vue在watch中监听对象属性的变化
- Servlet事件监听器、监听servletContext域对象创建和销毁、监听三个域对象属性变化
- Servlet事件监听器、监听servletContext域对象创建和销毁、监听三个域对象属性变化
- 解决Vue2.0 watch对象属性变化监听不到的问题
- 监听三大域对象的属性变化
- Listener 监听对象的属性变化
- 好记性不如烂笔头42-javaWeb监听对象域属性变化(6)
- Servlet事件监听器、监听servletContext域对象创建和销毁、监听三个域对象属性变化
- Vue2.0 解决watch对象属性变化监听不到问题
- IPHONE 和 KVC/KVO 监听对象属性变化(例如:获取textView 的text的变化)
- JavaScript[对象.属性]集锦
- javascript中String 对象属性和方法
- JAVASCRIPT对象及属性