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 相关文章推荐
JQuery 学习笔记 选择器之六
Jul 23 Javascript
javascript实现面向对象类的功能书写技巧
Mar 07 Javascript
DOM操作一些常用的属性汇总
Mar 13 Javascript
微信小程序  网络请求API详解
Oct 25 Javascript
AngularJS实现ajax请求的方法
Nov 22 Javascript
详解jQuery简单的表单应用
Dec 16 Javascript
详解Angular CLI + Electron 开发环境搭建
Jul 20 Javascript
VUE实现一个分页组件的示例
Sep 13 Javascript
javascript实现数字配对游戏的实例讲解
Dec 14 Javascript
bootstrap动态调用select下拉框的实例代码
Aug 09 Javascript
vue移动端html5页面根据屏幕适配的四种解决方法
Oct 19 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
Jan 27 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桌面中心(三) 修改数据库
2007/03/11 PHP
一个简单的网页密码登陆php代码
2012/07/17 PHP
thinkphp中空模板与空模块的用法实例
2014/11/26 PHP
php实现将上传word文件转为html的方法
2015/06/03 PHP
JavaScript加密解密7种方法总结分析
2007/10/07 Javascript
锋利的jQuery 要点归纳(一) jQuery选择器
2010/03/21 Javascript
JavaScript 拾碎[三] 使用className属性
2010/10/16 Javascript
关于html+ashx开发中几个问题的解决方法
2011/07/18 Javascript
Extjs4 GridPanel的主要配置参数详细介绍
2013/04/18 Javascript
jquery实现弹出层遮罩效果的简单实例
2014/03/03 Javascript
jquery实现textarea输入框限制字数的方法
2015/01/15 Javascript
浅谈document.write()输出样式
2015/05/07 Javascript
webpack中引用jquery的简单实现
2016/06/08 Javascript
jQuery动态改变多行文本框高度的方法
2016/09/07 Javascript
关于Jquery中的事件绑定总结
2016/10/26 Javascript
ES6学习教程之块级作用域详解
2017/10/09 Javascript
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
js判断传入时间和当前时间大小实例(超简单)
2018/01/11 Javascript
angularJs-$http实现百度搜索时的动态下拉框示例
2018/02/27 Javascript
Spring boot 和Vue开发中CORS跨域问题解决
2018/09/05 Javascript
json 带斜杠时如何解析的实现
2019/08/12 Javascript
python获取Linux下文件版本信息、公司名和产品名的方法
2014/10/05 Python
Python错误处理操作示例
2018/07/18 Python
pandas进行时间数据的转换和计算时间差并提取年月日
2019/07/06 Python
Django REST Framework之频率限制的使用
2019/09/29 Python
Python使用Chrome插件实现爬虫过程图解
2020/06/09 Python
详解如何用canvas画一个微笑的表情
2019/03/14 HTML / CSS
联想哥伦比亚网上商城:Lenovo Colombia
2017/01/10 全球购物
Desigual英国官网:在线购买原创服装
2018/03/09 全球购物
SCHIESSER荷兰官方网站:德国内衣专家
2020/10/09 全球购物
初一学生评语大全
2014/04/24 职场文书
平安家庭示范户事迹
2014/06/02 职场文书
财务部副经理岗位职责范本
2014/06/17 职场文书
房屋所有权证明
2014/10/20 职场文书
小学老师对学生的评语
2014/12/29 职场文书
学历证明样本
2015/06/16 职场文书