- 定义:要用的属性不存在,要通过已有的属性得来
- 原理:底层借助了
Object.defineproperty
方法提供的getter
和setter
get函数什么时候执行?
- 初次读取时会执行
- 当依赖的数据发生变化时会被再次调用
- 优势:与
methods
实现相比,内部有缓存机制,效率更高,调式方便
备注:
- 计算属性最终会出现在
vm
上,直接读取使用即可 - 如果计算属性要被修改,那必须写
set
函数去响应修改,且set中要引起计算时依赖的数据发生变化
<div id="root"> 姓:<input type="text" v-model="firstname"> <br> <br> 名: <input type="text" v-model="lastname"> <br> <br> 姓名: <span>{{fullName}}</span> </div> <script> const vm = new Vue({ el: "#root", data: { firstname: '张', lastname: '三' }, computed: { fullName: { //当有人读取fullName时,get就会被调用且返回值作为fullName的值 // get什么时候调用?初次读取fullName时;所依赖的数据发生变化 get() { console.log('get被调用了'); return this.firstname + '-' + this.lastname }, set(value) { console.log('set', value); const arr = value.split('-'); this.firstname = arr[0]; this.lastname = arr[1]; } } } }) </script>
简写版
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script src="../js/vue.js"></script> </head> <body> <!-- 计算属性: 定义:要用的属性不存在,要通过已有的属性得来 原理:底层借助了Object.defineproperty方法提供的getter和setter get函数什么时候执行? 初次读取时会执行 当依赖的数据发生变化时会被再次调用 优势:与methods实现相比,内部有缓存机制,效率更高,调式方便 备注: 计算属性最终会出现在vm上,直接读取使用即可 如果计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算时依赖的数据发生变化 --> <div id="root"> 姓:<input type="text" v-model="firstname"> <br> <br> 名: <input type="text" v-model="lastname"> <br> <br> 姓名: <span>{{fullName}}</span> </div> <script> const vm = new Vue({ el: "#root", data: { firstname: '张', lastname: '三' }, computed: { //完整写法 // fullName: { // //当有人读取fullName时,get就会被调用且返回值作为fullName的值 // // get什么时候调用?初次读取fullName时;所依赖的数据发生变化 // get() { // console.log('get被调用了'); // return this.firstname + '-' + this.lastname // }, // set(value) { // console.log('set', value); // const arr = value.split('-'); // this.firstname = arr[0]; // this.lastname = arr[1]; // } // } // } //简写 fullName() { return this.firstname + this.lastname } } }) </script> </body> </html>