Javascript监视变量变化的方法


Posted in Javascript onJune 09, 2015

本文实例讲述了Javascript监视变量变化的方法。分享给大家供大家参考。具体分析如下:

大家应该知道,在C#中对于属性、文件等的更改监视非常简单,因为有委托(事件)、FileSystemWatcher等好东东扶持。

那么在JavaScript中,如何对变量的更改进行监视呢?首先,我仿照c#的属性来对JS进行操作,写出了如下的示例:

function Class1()
{
  var oldValue='';
  var name='xu';
  var id='1';
  this.setName=function(n)
  {
   oldValue=name;
   name=n;
   this.propertyChange('name',oldValue,n);
 }
 this.setID=function(n)
 {
   oldValue=id;
   id=n;
   this.propertyChange('id',oldValue,n);
 }
 this.display=function()
 {
   alert(name+'\'s id is :'+id);
 }
}
Class1.prototype={
 propertyChange:function(propertyName,oldValue,newValue)
 {
   alert(propertyName+'\'s value changed from '+oldValue+' to '+newValue); 
 }
};
var c=new Class1();
c.setName('xu22');
c.setID('5');
c.display();

将对对象内部变量(私有变量)的赋值操作提取到了方法中,而在该方法中触发相应的变量值更改回调方法。

按说这样搞就能监视变量 的更改了,但是在FireFox的官方网站上有一个叫Object.watch(unwatch)的东东,可以用来监视变量的变更。

非常可惜的是,这个方法在IE等浏览器下不能正常运行。俺到网上搜了一番,在

http://stackoverflow.com/questions/1269633/javascript-watch-for-object-properties-changes

中找到如下东东:

if (!Object.prototype.watch)
{
   Object.prototype.watch = function (prop, handler) 
   {
     var oldval = this[prop], newval = oldval,
     getter = function ()
     {
       return newval;
     },
     setter = function (val) 
     {
       oldval = newval;
       return newval = handler.call(this, prop, oldval, val);
     };
     if (delete this[prop])
     { 
       if (Object.defineProperty) // ECMAScript 5
       {      
         Object.defineProperty(this, prop, {get: getter,set: setter});
       }
       else if (Object.prototype.__defineGetter__ && Object.prototype.__defineSetter__) 
       {
         Object.prototype.__defineGetter__.call(this, prop, getter);
         Object.prototype.__defineSetter__.call(this, prop, setter);
       }
     }
   };
}
if (!Object.prototype.unwatch)
{
   Object.prototype.unwatch = function (prop) 
   {
     var val = this[prop];
     delete this[prop]; 
     this[prop] = val;
   };
}

通过__defineSetter__来对赋值操作监听~~~

OK,好东西。收藏一下。

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
javascript学习笔记(十七) 检测浏览器插件代码
Jun 20 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
Jun 24 Javascript
node.js中的console.assert方法使用说明
Dec 10 Javascript
如何利用JQuery实现从底部回到顶部的功能
Dec 27 Javascript
javaScript基础详解
Jan 19 Javascript
Angular2入门教程之模块和组件详解
May 28 Javascript
shiro授权的实现原理
Sep 21 Javascript
vuex与组件联合使用的方法
May 10 Javascript
JavaScript学习笔记之数组基本操作示例
Jan 09 Javascript
详解vue中this.$emit()的返回值是什么
Apr 07 Javascript
vue.js高德地图实现热点图代码实例
Apr 18 Javascript
javascript获取select值的方法完整实例
Jun 20 Javascript
简介JavaScript中的unshift()方法的使用
Jun 09 #Javascript
JavaScript中的splice()方法使用详解
Jun 09 #Javascript
JavaScript实现Iterator模式实例分析
Jun 09 #Javascript
JavaScript中用sort()方法对数组元素进行排序的操作
Jun 09 #Javascript
JavaScript数组迭代器实例分析
Jun 09 #Javascript
在Javascript中处理数组之toSource()方法的使用
Jun 09 #Javascript
JavaScript中的some()方法使用详解
Jun 09 #Javascript
You might like
php中随机显示图片的函数代码
2011/06/23 PHP
如何解决PHP获取不到SESSION信息之一般情况
2019/10/10 PHP
从阿里妈妈发现的几个不错的表单验证函数
2007/09/21 Javascript
js获取光标位置和设置文本框光标位置示例代码
2014/01/09 Javascript
js中哈希表的几种用法总结
2014/01/28 Javascript
JavaScript中使用Callback控制流程介绍
2015/03/16 Javascript
JQuery跳出each循环的方法
2015/04/16 Javascript
异步JS框架的作用以及实现方法
2015/10/29 Javascript
JavaScript如何实现组合列表框中元素移动效果
2016/03/01 Javascript
Vue.js创建Calendar日历效果
2016/11/03 Javascript
浅谈JavaScript的闭包函数
2016/12/08 Javascript
JavaScript中利用Array filter() 方法压缩稀疏数组
2018/02/24 Javascript
详解Vue CLI3配置之filenameHashing使用和源码设计使用和源码设计
2018/08/31 Javascript
详解vue中axios请求的封装
2019/04/08 Javascript
vue远程加载sfc组件思路详解
2019/12/25 Javascript
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
[42:24]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第三场 11.27
2020/12/01 DOTA
python使用win32com在百度空间插入html元素示例
2014/02/20 Python
Python有序字典简单实现方法示例
2017/09/28 Python
django 开发忘记密码通过邮箱找回功能示例
2018/04/17 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
2018/07/06 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
2020/02/11 Python
Python多线程threading join和守护线程setDeamon原理详解
2020/03/18 Python
python实现TCP文件传输
2020/03/20 Python
顶丰TOPPIK台湾官网:增发纤维假发,告别秃发困扰
2018/06/13 全球购物
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
加拿大在线旅游公司:Flighthub
2019/03/11 全球购物
保安的辞职报告怎么写
2014/01/20 职场文书
安全大检查反思材料
2014/01/31 职场文书
上课看小说检讨书
2014/02/22 职场文书
关于护士节的演讲稿
2014/05/26 职场文书
革命英雄事迹演讲稿
2014/09/13 职场文书
教师节慰问信
2015/02/15 职场文书
用Python爬取某乎手机APP数据
2021/06/15 Python
python画条形图的具体代码
2022/04/20 Python
js前端面试常见浏览器缓存强缓存及协商缓存实例
2022/06/21 Javascript