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 相关文章推荐
关于Mozilla浏览器不支持innerText的解决办法
Jan 01 Javascript
jquery命令汇总,方便使用jquery的朋友
Jun 26 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
Aug 17 Javascript
JavaScript中的运算符种类及其规则介绍
Sep 26 Javascript
轻量级jQuery插件slideBox实现带底栏轮播(焦点图)代码
Mar 28 Javascript
angular route中使用resolve在uglify压缩后问题解决
Sep 21 Javascript
微信小程序 扎金花简单实例
Feb 21 Javascript
详解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
Jun 16 Javascript
Angular实现的敏感文字自动过滤与提示功能示例
Dec 29 Javascript
mpvue 如何使用腾讯视频插件的方法
Jul 16 Javascript
微信小程序遍历Echarts图表实现多个饼图
Apr 25 Javascript
vue项目初始化到登录login页面的示例
Oct 31 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:风雨欲来 路在何方?
2006/10/09 PHP
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
2010/02/16 PHP
php curl中gzip的压缩性能测试实例分析
2016/11/08 PHP
PHP数据的提交与过滤基本操作实例详解
2016/11/11 PHP
php实现的XML操作(读取)封装类完整实例
2017/02/23 PHP
php实现数据库的增删改查
2017/02/26 PHP
ThinkPHP 3.2.2实现事务操作的方法
2017/05/05 PHP
PHP实现对xml的增删改查操作案例分析
2017/05/19 PHP
php回调函数处理数组操作示例
2020/04/13 PHP
(推荐一个超好的JS函数库)S.Sams Lifexperience ScriptClassLib
2007/04/29 Javascript
禁止js文件缓存的代码
2010/04/09 Javascript
jQuery前台数据获取实现代码
2011/03/16 Javascript
JavaScript中获取纯正的undefined的方法
2016/03/06 Javascript
JS中对象与字符串的互相转换详解
2016/05/20 Javascript
jQuery 常见小例汇总
2016/12/14 Javascript
javascript使用btoa和atob来进行Base64转码和解码
2017/03/20 Javascript
详解webpack 配合babel 将es6转成es5 超简单实例
2017/05/02 Javascript
Angular 4中如何显示内容的CSS样式示例代码
2017/11/06 Javascript
详解webpack多页面配置记录
2018/01/22 Javascript
微信小程序自定义tab实现多层tab嵌套功能
2018/06/15 Javascript
vue 纯js监听滚动条到底部的实例讲解
2018/09/03 Javascript
小程序实现搜索框
2020/06/19 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
Python+django实现文件下载
2016/01/17 Python
Python网站验证码识别
2016/01/25 Python
Python设计模式编程中Adapter适配器模式的使用实例
2016/03/02 Python
python学生管理系统代码实现
2020/04/05 Python
Python函数基本使用原理详解
2020/03/19 Python
利用python控制Autocad:pyautocad方式
2020/06/01 Python
Python如何输出整数
2020/06/07 Python
10分钟入门CSS3 Animation
2018/12/25 HTML / CSS
Michael Kors加拿大官网:购买设计师手袋、手表、鞋子、服装等
2019/03/16 全球购物
main 主函数执行完毕后,是否可能会再执行一段代码,给出说明
2012/12/05 面试题
银行演讲稿范文
2014/01/03 职场文书
女方家长婚礼致辞
2015/07/27 职场文书
python分分钟绘制精美地图海报
2022/02/15 Python