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 相关文章推荐
xtree.js 代码
Mar 13 Javascript
JavaScript 学习初步 入门教程
Mar 25 Javascript
JS远程获取网页源代码实例
Sep 05 Javascript
javascript学习笔记(二)数组和对象部分
Sep 30 Javascript
jQuery+json实现的简易Ajax调用实例
Dec 14 Javascript
网页前端登录js按Enter回车键实现登陆的两种方法
May 10 Javascript
谈谈jQuery之Deferred源码剖析
Dec 19 Javascript
JavaScript中动态向表格添加数据
Jan 24 Javascript
js/jq仿window文件夹移动/剪切/复制等操作代码
Mar 08 Javascript
详解Vue.js入门环境搭建
Mar 17 Javascript
Three.js加载外部模型的教程详解
Nov 10 Javascript
jQuery实现的简单图片轮播效果完整示例
Feb 08 jQuery
简介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 加密/解密函数 dencrypt(动态密文,带压缩功能,支持中文)
2009/01/30 PHP
PHP中对用户身份认证实现两种方法
2011/06/04 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
2013/06/18 PHP
thinkphp3查询mssql数据库乱码解决方法分享
2014/02/11 PHP
PHP简单的MVC框架实现方法
2015/12/01 PHP
PHP编写RESTful接口的方法
2016/02/21 PHP
浅谈PHP表单提交(POST&GET&URL编/解码)
2017/04/03 PHP
PHP生成(支持多模板)二维码海报代码
2018/04/30 PHP
PHP SESSION机制的理解与实例
2019/03/22 PHP
js修改地址栏URL参数解决url参数问题
2012/12/15 Javascript
js对象与打印对象分析比较
2013/04/23 Javascript
详细介绍8款超实用JavaScript框架
2013/10/25 Javascript
JavaScript中Null与Undefined的区别解析
2015/06/30 Javascript
使用jquery动态加载Js文件和Css文件
2015/10/24 Javascript
JavaScript驾驭网页-DOM
2016/03/24 Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
2016/04/01 Javascript
Javascript实现前端简单的路由实例
2016/09/11 Javascript
angularjs使用directive实现分页组件的示例
2017/02/07 Javascript
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
JS中验证整数和小数的正则表达式
2018/10/08 Javascript
微信小程序下拉菜单效果的实例代码
2019/05/14 Javascript
python正则表达式抓取成语网站
2013/11/20 Python
Python用模块pytz来转换时区
2016/08/19 Python
PYTHON实现SIGN签名的过程解析
2019/10/28 Python
Python数据可视化:幂律分布实例详解
2019/12/07 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
2020/03/04 Python
利用 Python ElementTree 生成 xml的实例
2020/03/06 Python
python编写扎金花小程序的实例代码
2021/02/23 Python
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
AJAX的优缺点都有什么
2015/08/18 面试题
城市精细化管理实施方案
2014/03/04 职场文书
中华魂放飞梦想演讲稿
2014/08/26 职场文书
党的群众路线查摆剖析材料
2014/10/10 职场文书
大学毕业生自我鉴定范文
2019/06/21 职场文书
MySQL完整性约束的定义与实例教程
2021/05/30 MySQL
python 实现两个变量值进行交换的n种操作
2021/06/02 Python