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 相关文章推荐
js脚本学习 比较实用的基础
Sep 07 Javascript
实例:用 JavaScript 来操作字符串(一些字符串函数)
Feb 15 Javascript
百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome
Apr 13 Javascript
添加JavaScript重载函数的辅助方法2
Jul 04 Javascript
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
Sep 09 Javascript
Bootstrap Metronic完全响应式管理模板学习笔记
Jul 08 Javascript
vue.js入门(3)——详解组件通信
Dec 02 Javascript
JSON 数据详解及实例代码分析
Jan 20 Javascript
JS实现动态修改table及合并单元格的方法示例
Feb 20 Javascript
Angularjs修改密码的实例代码
May 26 Javascript
微信小程序vant弹窗组件的实现方式
Feb 21 Javascript
Vue中父子组件的值传递与方法传递
Sep 28 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/02 无线电
php正则校验用户名介绍
2008/07/19 PHP
学习使用curl采集curl使用方法
2012/01/11 PHP
php+mysql结合Ajax实现点赞功能完整实例
2015/01/30 PHP
PHP变量赋值、代入给JavaScript中的变量
2015/06/29 PHP
Smarty最简单实现列表奇偶变色的方法
2015/07/01 PHP
IE与firefox之jquery用法区别
2008/10/03 Javascript
fireworks菜单生成器mm_menu.js在 IE 7.0 显示问题的解决方法
2009/10/20 Javascript
php gethostbyname获取域名ip地址函数详解
2010/01/24 Javascript
jQuery .tmpl(), .template()学习资料小结
2011/07/18 Javascript
文本框input聚焦失焦样式实现代码
2012/10/12 Javascript
js清空form表单中的内容示例
2014/05/20 Javascript
对 jQuery 中 data 方法的误解分析
2014/06/18 Javascript
基于js与flash实现的网站flv视频播放插件代码
2014/10/14 Javascript
如何用angularjs制作一个完整的表格
2016/01/21 Javascript
Bootstrap模块dropdown实现下拉框响应
2016/05/22 Javascript
AngularJS指令详解及示例代码
2016/08/16 Javascript
微信小程序入门教程
2016/11/18 Javascript
浅谈ES6 模板字符串的具体使用方法
2017/11/07 Javascript
详解Immutable及 React 中实践
2018/03/01 Javascript
实例解析Vue.js下载方式及基本概念
2018/05/11 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
2019/09/17 Javascript
js实现随机点名器精简版
2020/06/29 Javascript
js实现购物车商品数量加减
2020/09/21 Javascript
[05:31]DOTA2上海特级锦标赛主赛事第三日RECAP
2016/03/05 DOTA
Python 微信爬虫完整实例【单线程与多线程】
2019/07/06 Python
利用ImageAI库只需几行python代码实现目标检测
2019/08/09 Python
python range实例用法分享
2020/02/06 Python
Python操作Jira库常用方法解析
2020/04/10 Python
简单的命令查看安装的python版本号
2020/08/28 Python
python调用有道智云API实现文件批量翻译
2020/10/10 Python
运动会广播稿200字
2014/01/15 职场文书
反四风个人对照检查材料
2014/09/26 职场文书
一起来学习Python的元组和列表
2022/03/13 Python
HTML5基础学习之文本标签控制
2022/03/25 HTML / CSS
Nginx虚拟主机的配置步骤过程全解
2022/03/31 Servers