- Vue 响应式基本原理
const data = {}
let name = 'zhangsan'
Object.defineProperty(data, 'name', {
get: function () {
console.log('get');
return name
},
set: function (newVal) {
console.log('set');
name = newVal
}
})
console.log(data.name);
data.name = 'lisi'
- Object.defineProperty 缺点
- 深度监听,需要递归到底,一次性计算量很大
- 无法监听新增属性 / 删除属性(vue.set / Vue.delete)
- 无法原生监听数组,需要特殊处理
- 用 JS 模拟 DOM 结构
<div id="div1" class="container">
<p>vdom</p>
<ul style="font-size: 20px;">
<li>a</li>
</ul>
</div>
{
tag: 'div',
props: {
className: 'container',
id: 'div1'
},
children: [
{
tag: 'p',
children: 'vdom'
},
{
tag: 'ul',
props: { style: 'font-size: 20px'},
children: [
{
tag: 'li',
children: 'a'
}
]
}
]
}
|