Vue · 单选题 · 第 49 题
前端与全栈开发面试 · 第 49 题
Vue 3 的响应式系统基于什么实现?
- A用 Object.defineProperty 递归改写对象上每一个属性
- B用脏检查,每隔一段时间比较新旧值是否发生了变化
- C用定时器轮询数据,一旦发现变化就重新渲染整个页面
- D用 Proxy 代理对象,读取时收集依赖,写入时触发更新
答案
D D. 用 Proxy 代理对象,读取时收集依赖,写入时触发更新
解析
Proxy 拦截的是整个对象,所以新增属性、删除属性、数组下标和长度的变化都能被侦测到,并且是访问到深层对象时才递归代理,初始化更快。Object.defineProperty 是 Vue 2 的方案。脏检查是 AngularJS 1.x 的做法。