在
Javascript中观察数组的变化是相对微不足道的.
我使用的一种方法是这样的:
// subscribe to add,update,delete,and splice changes Array.observe(viewHelpFiles,function(changes) { // handle changes... in this case,we'll just log them changes.forEach(function(change) { console.log(Object.keys(change).reduce(function(p,c) { if (c !== "object" && c in change) { p.push(c + ": " + JSON.stringify(change[c])); } return p; },[]).join(",")); }); });
不过最近我读过Array.observe已经被弃用了,我们应该使用proxy object instead.
我们如何检测数组代理对象的变化?我找不到任何有兴趣阐述的例子吗?
解决方法
从我可以从
MDN page读取的内容,您可以创建一个通用处理程序,您可以以全局方式处理对象的更改.
在某种意义上说,你写一个拦截器,每次从数组中获取一个值或设置一个值时,它将进行干预.然后,您可以编写自己的逻辑来跟随更改.
var arrayChangeHandler = { get: function(target,property) { console.log('getting ' + property + ' for ' + target); // property is index in this case return target[property]; },set: function(target,property,value,receiver) { console.log('setting ' + property + ' for ' + target + ' with value ' + value); target[property] = value; // you have to return true to accept the changes return true; } }; var arrayToObserve = new Proxy([],arrayChangeHandler); arrayToObserve.push('Test'); console.log(arrayToObserve[0]);
然后输出:
getting push for getting length for setting 0 for with value Test setting length for Test with value 1 getting 0 for Test Test