有这么一个需求,给定一个很长的 typed array ,由其他人的逻辑修改,在一个循环中进行多次修改,而我需要多次做记录,即上次到目前是否有修改,将整个数组发回去,不需要找出具体的修改内容.如何在不改动其他人的代码的同时用最小的成本做到这一切?
预期其他人的修改是通过 set 函数和[]操作符.就希望在这些函数调用时插入一个设置 dirty 的语句.
set 函数可以轻易修改,但[]操作符却因为 javascript 操作符不能重载而难以追踪到是否有数据修改.
目前已经作废的想法如下:
1.所有需要遍历数组的办法比较低效,还要每次复制原数组.
2.查到可以使用 Array.observe (),可以获得更新的回调,不过发现是异步的,而这样的话在回调之前我便已经需要对这个数组做判断了,而且似乎比较重量级,性能消耗大.
3.查到可以使用 Object.defineProperty ,注册对应下标的 get , set 函数,不过似乎需要针对每个下标都注册函数,而且发现这个方法对于 typed array 无效,对于 ArrayBuffer , Object 和 Array 可行.
4.可以写一个 Proxy 将这个数组包在里面,不过没有办法修改其他人的代码,没办法修改引用为新的 Proxy .
我还注意到 typed array 中有一 ArrayBuffer 成员,不过似乎对这个 buffer 注册没有用处.
求教是否还有其他办法.
预期其他人的修改是通过 set 函数和[]操作符.就希望在这些函数调用时插入一个设置 dirty 的语句.
set 函数可以轻易修改,但[]操作符却因为 javascript 操作符不能重载而难以追踪到是否有数据修改.
目前已经作废的想法如下:
1.所有需要遍历数组的办法比较低效,还要每次复制原数组.
2.查到可以使用 Array.observe (),可以获得更新的回调,不过发现是异步的,而这样的话在回调之前我便已经需要对这个数组做判断了,而且似乎比较重量级,性能消耗大.
3.查到可以使用 Object.defineProperty ,注册对应下标的 get , set 函数,不过似乎需要针对每个下标都注册函数,而且发现这个方法对于 typed array 无效,对于 ArrayBuffer , Object 和 Array 可行.
4.可以写一个 Proxy 将这个数组包在里面,不过没有办法修改其他人的代码,没办法修改引用为新的 Proxy .
我还注意到 typed array 中有一 ArrayBuffer 成员,不过似乎对这个 buffer 注册没有用处.
求教是否还有其他办法.