javascript 监听对象属性的变化

本文详细介绍了Vue.js框架中实现数据双向绑定的核心技术,包括如何使用Object.defineProperty()方法来监听数据变化并触发回调函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  许多优秀的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;

以下是运行结果:

图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值