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 相关文章推荐
如何实现浏览器上的右键菜单
Jul 10 Javascript
DOM精简教程
Oct 03 Javascript
几款极品的javascript压缩混淆工具
May 16 Javascript
jQuery 处理表单元素的代码
Feb 15 Javascript
删除select中所有option选项jquery代码
Aug 12 Javascript
jquery easyui 结合jsp简单展现table数据示例
Apr 18 Javascript
jquery修改网页背景颜色通过css方法实现
Jun 06 Javascript
Javascript让DEDECMS告别手写Tag
Sep 01 Javascript
小米公司JavaScript面试题
Dec 29 Javascript
JS获取和修改元素样式的实例代码
Aug 06 Javascript
用js编写留言板
Mar 17 Javascript
vue使用exif获取图片旋转,压缩的示例代码
Dec 11 Vue.js
简介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的类 功能齐全的发送邮件类
2006/10/09 PHP
PHP 进程锁定问题分析研究
2009/11/24 PHP
PHP大文件分片上传的实现方法
2018/10/28 PHP
javascript 内存回收机制理解
2011/01/17 Javascript
JS关闭窗口或JS关闭页面的几种代码分享
2013/10/25 Javascript
利用js(jquery)操作Cookie的方法说明
2013/12/19 Javascript
javascript删除数组元素并且数组长度减小的简单实例
2014/02/14 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
2014/10/23 Javascript
jQuery实现文本展开收缩特效
2015/06/03 Javascript
JavaScript中函数(Function)的apply与call理解
2015/07/08 Javascript
Javascript仿新浪游戏频道鼠标悬停显示子菜单效果
2015/08/21 Javascript
JS开发中百度地图+城市联动实现实时触发查询地址功能
2017/04/13 Javascript
如何去除vue项目中的#及其ie9兼容性
2018/01/11 Javascript
JS继承定义与使用方法简单示例
2020/02/19 Javascript
Python实现的飞速中文网小说下载脚本
2015/04/23 Python
Python从MP3文件获取id3的方法
2015/06/15 Python
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
2018/03/19 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
对python操作kafka写入json数据的简单demo分享
2018/12/27 Python
python3 打印输出字典中特定的某个key的方法示例
2019/07/06 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
2019/10/23 Python
Python csv文件的读写操作实例详解
2019/11/19 Python
IE兼容css3圆角的实现代码
2011/07/21 HTML / CSS
CSS3中颜色线性渐变实战
2015/07/18 HTML / CSS
纯CSS3+DIV实现小三角形边框效果的示例代码
2020/08/03 HTML / CSS
浅谈html5增强的页面元素
2016/06/14 HTML / CSS
吃透移动端 Html5 响应式布局
2019/12/16 HTML / CSS
来自世界各地的饮料:Flavourly
2019/05/06 全球购物
俄罗斯EPL钻石珠宝店:ЭПЛ
2019/10/22 全球购物
Viking比利时:购买办公用品
2019/10/30 全球购物
企业员工培训感言
2014/02/26 职场文书
大学生2014全国两会学习心得体会
2014/03/10 职场文书
三严三实民主生活会发言稿
2014/10/13 职场文书
小学见习报告
2015/06/23 职场文书
python实现三次密码验证的示例
2021/04/29 Python
php中配置文件保存修改操作 如config.php文件的读取修改等操作
2021/05/12 PHP