var data=[];
//---
开始监听,书写监听
//---
1.//data=[{id:1,name:'xx'},{id:2,name:'hh'}]//监听到数组长度是2
2.//data.push({id:3,name'yy'})//监听到数组长度是3
3.//data=[]//监听到数组长度是0
有很多办法:
- 使用
Proxy
对象包裹你的目标数组的push
方法 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy - 用
Object.defineProperty
覆盖你目标数组的push
方法: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty - 直接覆盖目标对象的
push
方法, 并在方法内调用Array.prototype.push.apply(this, arguments)
的方式来调用原始 Array 对象的push
方法, 在前面和后面则可以加入你的逻辑
上述方法可能还需要包括 shift
, splice
, unshift
, pop
等其它会改变数组长度的方法, 看你实际需求.
var data = [];
Object.defineProperty(window,data,{set() { return arr.length}})
data.push(1) // 1
###一楼 vimac回答的听好了
这种东西 学习研究可以,如果项目使用的话,推荐使用已有成熟框架,比如 mobx