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 相关文章推荐
AJAX的跨域与JSONP(为文章自动添加短址的功能)
Jan 17 Javascript
jquery在IE、FF浏览器的差别详细探讨
Apr 28 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
Sep 26 Javascript
利用jquery操作Radio方法小结
Oct 20 Javascript
JS+CSS实现可拖动的弹出提示框
Feb 16 Javascript
jQuery on()方法绑定动态元素的点击事件无响应的解决办法
Jul 07 Javascript
jQuery插件学习教程之SlidesJs轮播+Validation验证
Jul 12 Javascript
Angularjs结合Bootstrap制作的一个TODO List
Aug 18 Javascript
原生js验证简洁注册登录页面
Dec 17 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
Mar 30 jQuery
Kotlin学习第一步 kotlin语法特性
May 25 Javascript
在小程序开发中使用npm的方法
Oct 17 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 输出缓存详解
2009/06/20 PHP
PHP下对字符串的递增运算代码
2010/08/21 PHP
PHP文件打开、关闭、写入的判断与执行代码
2011/05/24 PHP
推荐一款MAC OS X 下php集成开发环境mamp
2014/11/08 PHP
php实现图片等比例缩放代码
2015/07/23 PHP
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
常见表单重复提交问题整理及解决方法
2013/11/13 Javascript
文本框文本自动补全效果示例分享
2014/01/19 Javascript
Google官方支持的NodeJS访问API,提供后台登录授权
2014/07/29 NodeJs
JS实现为排序好的字符串找出重复行的方法
2016/03/02 Javascript
JavaScript知识点总结(五)之Javascript中两个等于号(==)和三个等于号(===)的区别
2016/05/31 Javascript
Bootstrap Modal遮罩弹出层(完整版)
2016/11/21 Javascript
js仿小米手机上下滑动效果
2017/02/05 Javascript
解决Webpack 热部署检测不到文件变化的问题
2018/02/22 Javascript
Vue.js 表单控件操作小结
2018/03/29 Javascript
利用jsonp解决js读取本地json跨域的问题
2018/12/11 Javascript
vue 插件的方法代码详解
2019/06/06 Javascript
[36:09]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
跟老齐学Python之重回函数
2014/10/10 Python
pymysql模块的使用(增删改查)详解
2019/09/09 Python
pytorch构建多模型实例
2020/01/15 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
2020/04/03 Python
Windows 平台做 Python 开发的最佳组合(推荐)
2020/07/27 Python
Python爬虫UA伪装爬取的实例讲解
2021/02/19 Python
python实现银行账户系统
2021/02/22 Python
css3和jquery实现的可折叠导航菜单适合放在手机网页的导航菜单
2014/09/02 HTML / CSS
匡威西班牙官网:Converse西班牙
2019/10/01 全球购物
网络教育毕业生自我鉴定
2013/10/10 职场文书
医院工作检讨书范文
2014/02/10 职场文书
入股协议书
2014/04/14 职场文书
城管大队整治方案
2014/05/06 职场文书
中班下学期个人工作总结
2015/02/12 职场文书
讲座开场白台词和结束语
2015/05/29 职场文书
2019年员工晋升管理制度范本!
2019/07/08 职场文书
Java spring定时任务详解
2021/10/05 Java/Android
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle