如何监听 js 中变量的变化?

我现在有这样一个需求,需要监控js的某个变量的改变,如果该变量发生变化,则触发一些事件,不能使用timeinterval之类的定时去监控的方法,不知道有比较好的解决方案么?

比如我定义了如下全局变量:

var a= { zhihu:0 };

需要做的是当config.jiankong值被其他js文件中的某些函数改变时,需要触发指定的事件!


linux零基础学习视频
浏览 6874回答 6
6回答

慕田峪是谁我也不认识

别用变量就好了~弄个函数,里面声明一个变量,或者用一个全局变量,需要修改的时候得调用这个函数,这样你就能知道了

英明神武的牛

数组的话可以通过重定义JS系统函数来实现了,通过 Array.prototype.add = func(){  this.push() }  之类的方法  在fun中增加一个自定义的回调事件

林逸舟丶

不知道你接触过Vue.js没有,想来应该是没接触过。es6新增了一些底层方法,支持观察到变量的变化,你可以百度一下

不要慕码人我要切诺基

1.使用 defineProperty 或 __define_setter__ 给写属性添加回调函数。对浏览器兼容性有要求2.使用现成的库,比如 watch.js。不过在老版本浏览器下 watch.js 使用了定时器监控,此时回调是异步的,而在新版浏览器中回调是同步的,时序不一致3.使用 MVVM 框架 avalon,此框架使用 vb script 实现了老版本 IE 的兼容,没有使用定时器,不过针对你的简单需求,略有点庞大4.数组成员不能靠以上方法监听,目前我所知的只能间接监听一部分数组函数,实现方法就是函数替换,替换目标是那些会改变 this 数组的“非纯函数”,比如splice

拖鞋_

ES6好像有

慕数据8267187

VFMPTKRYVYMJFLCDOVJROFFTPCDQRJAYPZBHNDTAALIJSSZCWCMZZUCNHRLDHTTQUUANNEBXLRHOQTOIYICTCIFCEOVIFGCGQWMAHXOFISLLOKKHXPLCPPTMGWMSJKKRHYFKAFTZAHRODAKYCRMGQDUDEWJXJFBOZPMGDDQXRYFSTTTIJJWUUAHUPFPGQGHPDSIFWVYLCTJDAUJGQHRBOPZGYAXUKLPCCTUPTQADEYOBAABYSHUKWWUHYPMPJPLZFWNKHHLILXOKLSBFPTNAFLPMCDQDCJNAIOOSTXKRRJQLPRRIIZYVCCTZMMFWWDUELMFXGSPQAUHQXRBOUAQNHRIVWPQNYFOFWGUNULFCGFPJZQROWBHLSRDUUWTQHISJJPYAUFDXOPMZZVPEIPSZAQEQHXNHYVJCDHNZOKXNEWZGGXXPKXEBRIWTJTNNQWCUVBFWDKQRBZSZAGHKRIIJQQQDTHUBYEPBLLJTOYBYOZCWGCZGDTJZDKGWTFVILSIFVYUBPRISFCLLLPZLXJZPUUUKEKOUPOOEZVFGQTJTGIYYLQANQUJNKQZKJMFMFCSFEUZXYLBBBEBUDZGZMGMTGGQQEXQJWTBBLZPZTPYEBFLXHHXBSUUFLDWMQUTQMVRERUXBEPFKSCBHYJQQGWTPJVBBWREOOLOSNTSCJMJPJJWNEQNDASPOYAKBCRMANDRNHVFCEZJSFSPFZQNAZIOKYBEEQAKALHEVRDRKRXEEZLRRVSVBIPXYNZZPUQKYOIPZEAGQNQXTJKNEFLSIVDGQZANWRNDQRESAAANKPBLLEOLYVVZTSEBZMVTSCMQDQSIILFRISWMZYOTKDBVMDKKFDPOFSFMZWVFCJJVVYMWPCMATZBHEZCVHHKVSSLVRPSCGWYBSIOHGUVQTNNKOXMCSJMOBBBIVTWVJGDQWWTWTPRNLFSFPYTQDNGMMZKEKAUTR

远看寒山石径斜

用KnockoutJS可以较容易实现。Knockout的observable可以实现数据的双向绑定,用被监控的变量名.subscribe(function(){//变量改变后调用该函数})可以实现某个变量变化就调用这个function
打开App,查看更多内容
随时随地看视频慕课网APP