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 相关文章推荐
麻雀虽小五脏俱全 Dojo自定义控件应用
Sep 04 Javascript
DOM_window对象属性之--clipboardData对象操作代码
Feb 03 Javascript
jQuery模拟新浪微博首页滚动效果的方法
Mar 11 Javascript
在Web项目中引入Jquery插件报错的完美解决方案(图解)
Sep 19 Javascript
jQuery插件Echarts实现的双轴图效果示例【附demo源码下载】
Mar 04 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
Mar 30 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
May 23 Javascript
2种简单的js倒计时方式
Oct 20 Javascript
js判断传入时间和当前时间大小实例(超简单)
Jan 11 Javascript
微信小程序制作表格的方法
Feb 14 Javascript
vue百度地图 + 定位的详解
May 13 Javascript
JS多个异步请求 按顺序执行next实现解析
Sep 16 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
国内咖啡文化
2021/03/03 咖啡文化
php获取新浪微博数据API实例
2013/11/12 PHP
优化JavaScript脚本的性能的几个注意事项
2006/12/22 Javascript
编写高性能的JavaScript 脚本的加载与执行
2010/04/19 Javascript
11款新鲜的jQuery插件[附所有demo下载]
2011/01/24 Javascript
ExtJS4给Combobox设置列表中的默认值示例
2014/05/02 Javascript
jQuery图片切换插件jquery.cycle.js使用示例
2014/06/16 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
2014/11/26 Javascript
jquery实现的简单二级菜单效果代码
2015/09/22 Javascript
浅析JavaScript中命名空间namespace模式
2016/06/22 Javascript
JS简单生成两个数字之间随机数的方法
2016/08/03 Javascript
ES6解构赋值实例详解
2017/10/31 Javascript
vue项目打包部署_nginx代理访问方法详解
2018/09/20 Javascript
让webpack+vue-cil项目不再自动打开浏览器的方法
2018/09/27 Javascript
解决ng-repeat产生的ng-model中取不到值的问题
2018/10/02 Javascript
学习使用ExpressJS 4.0中的新Router的用法
2018/11/06 Javascript
微信小程序保存图片到相册权限设置
2020/04/09 Javascript
vue 遮罩层阻止默认滚动事件操作
2020/07/28 Javascript
为什么推荐使用JSX开发Vue3
2020/12/28 Vue.js
Python中的hypot()方法使用简介
2015/05/18 Python
python 获取键盘输入,同时有超时的功能示例
2018/11/13 Python
将python图片转为二进制文本的实例
2019/01/24 Python
python版百度语音识别功能
2019/07/09 Python
Python3 获取文件属性的方式(时间、大小等)
2020/03/12 Python
CSS3旋转——彩色扇子兼容firefox浏览器
2013/06/04 HTML / CSS
加拿大消费电子和手机购物网站:The Source
2017/01/28 全球购物
Hotels.com印度:酒店预订
2019/05/11 全球购物
请解释接口的显式实现有什么意义
2012/05/26 面试题
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
销售提升方案
2014/06/07 职场文书
法制演讲稿
2014/09/10 职场文书
党委书记个人对照检查材料
2014/09/15 职场文书
在教室放鞭炮的检讨书
2014/09/28 职场文书
党员剖析材料范文
2014/12/18 职场文书
2015年安全月活动总结
2015/03/26 职场文书
战友聚会致辞
2015/07/28 职场文书