我们通过三个问题来分解下上面的问题
1.前端面试经常会问到一个问题,vue的数据绑定是怎么实现的?
答:vue2.x是通过defineProterty劫持对象的属性的get和set方法,当访问属性和获取属性,就可以执行相应的操作。
我们用代码实现下数据劫持:
let obj = {};
Object.defineProperty(obj,'name',{
get:()=>{
console.log('get')
},
set:()=>{
console.log('set')
}
})
console.log(obj.name)
obj.name = 'haveset'
如上代码,当通过obj.name访问name属性会触发get方法,当给name赋值的时候,会触发set方法。
2.上面的代码实现了数据劫持,数据绑定怎么实现呢?
数据驱动视图只需要在set里面更新视图即可,
视图修改数据呢?vue是单向数据流,但是提供了v-model可以实现双向绑定,原理就是在input,textarea onchage的时候,去修改data,代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
&