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 键盘事件的几个基本方法
Oct 30 Javascript
javascript提取URL的搜索字符串中的参数(自定义函数实现)
Jan 22 Javascript
每天一篇javascript学习小结(Array数组)
Nov 11 Javascript
vue.js初学入门教程(1)
Nov 03 Javascript
Vue2组件tree实现无限级树形菜单
Mar 29 Javascript
Angular.js 4.x中表单Template-Driven Forms详解
Apr 25 Javascript
使用html+js+css 实现页面轮播图效果(实例讲解)
Sep 21 Javascript
React Native日期时间选择组件的示例代码
Apr 27 Javascript
node实现的爬虫功能示例
May 04 Javascript
详解关于element el-button使用$attrs的一个注意要点
Nov 09 Javascript
微信小程序自定义可滑动顶部TabBar选项卡实现页面切换功能示例
May 14 Javascript
vue下载二进制流图片操作
Oct 26 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
判断Keep-Alive模式的HTTP请求的结束的实现代码
2011/08/06 PHP
使用PHP实现Mysql读写分离
2013/06/28 PHP
PHP获取中英混合字符串长度的方法
2014/06/07 PHP
php多次include后导致全局变量global失效的解决方法
2015/02/28 PHP
值得分享的php+ajax实时聊天室
2016/07/20 PHP
利用javascript中的call实现继承
2007/01/22 Javascript
JQ获取动态加载的图片大小的正确方法分享
2013/11/08 Javascript
js判断IE浏览器版本过低示例代码
2013/11/22 Javascript
三种取消选中单选框radio的方法
2014/09/09 Javascript
jquery使整个div区域可以点击的方法
2015/06/24 Javascript
Javascript点击其他任意地方隐藏关闭DIV实例
2016/06/21 Javascript
JQuery实现DIV其他动画效果的简单实例
2016/09/18 Javascript
用js写的一个路由(简单实例)
2016/09/24 Javascript
javascript 利用arguments实现可变长参数
2016/11/21 Javascript
如何判断出一个js对象是否一个dom对象
2016/11/24 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
微信小程序picker组件下拉框选择input输入框的实例
2017/09/20 Javascript
Vue中的scoped实现原理及穿透方法
2018/05/15 Javascript
Vuex 快速入门(简单易懂)
2018/09/20 Javascript
对vuex中getters计算过滤操作详解
2019/11/06 Javascript
javascript实现一款好看的秒表计时器
2020/09/05 Javascript
jQuery zTree如何改变指定节点文本样式
2020/10/16 jQuery
python继承和抽象类的实现方法
2015/01/14 Python
Python入门教程之if语句的用法
2015/05/14 Python
python dict 字典 以及 赋值 引用的一些实例(详解)
2017/01/20 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
2018/07/07 Python
Django uwsgi Nginx 的生产环境部署详解
2019/02/02 Python
Python入门Anaconda和Pycharm的安装和配置详解
2019/07/16 Python
利用python实现逐步回归
2020/02/24 Python
Peter Alexander新西兰站:澳大利亚领先的睡衣设计师品牌
2016/12/10 全球购物
程序员岗位职责
2013/11/11 职场文书
幼儿园教师教育感言
2014/02/28 职场文书
小学生十佳少年事迹材料
2014/08/20 职场文书
党的群众路线整改落实情况汇报
2014/10/28 职场文书
Java如何实现树的同构?
2021/06/22 Java/Android
企业版Windows 11有哪些新功能? Win11适用于企业的功能介绍
2021/11/21 数码科技