首页 > 其他分享 >Vue学习笔记2:计算属性,及其简写形式

Vue学习笔记2:计算属性,及其简写形式

时间:2023-11-05 18:12:03浏览次数:34  
标签:Vue lastName vm 笔记 getter 计算 fullName 简写 属性

2. 计算属性,及其简写形式

data中的各项就是属性。
所谓计算属性,就是拿已经写好的属性去加工或计算,生成一个全新的属性。
计算属性在computed里,是一个对象。对象里可以有计算属性的getter和setter,他们都是function。与Object.defineProperty方法中的getter和setter是一样的,并且计算属性的底层实现使用的就是Object.defineProperty方法

vm实例身上有data中的各个属性,也有computed中的各个属性。而vm身上有的各个计算属性,在计算属性被取值时(通过vm.xxx取值)会调用计算属性的getter,然后会把getter返回的结果缓存在vm身上的计算属性(vm.xxx)上。

<!--准备好一个容器-->
<div id="root">
    姓:<input type="text" v-model="firstName" /><br /><br />
    名:<input type="text" v-model="lastName" /><br /><br />
    全名:<span>{{fullName}}</span>
</div>

当读取fullName时,Vue就会调用fullName的getter,并且Vue已经把getter内部的this指向调整为了vm实例
下图中,首次调用计算属性fullName的getter时做了一个环境,后续再使用该计算属性的时候都使用了缓存,而没有再调用其getter
如何用methods中的方法替代计算属性fullName,则在下图这种场景下就会被重复调用多次。而计算属性只被调用1次,其他重复使用计算属性的地方使用缓存即可

<!--准备好一个容器-->
<div id="root">
    姓:<input type="text" v-model="firstName" /><br /><br />
    名:<input type="text" v-model="lastName" /><br /><br />
    全名:<span>{{fullName}}</span><br /><br />
    全名:<span>{{fullName}}</span><br /><br />
    全名:<span>{{fullName}}</span><br /><br />
    全名:<span>{{fullName}}</span>
</div>
<script type="text/javascript">
    const vm = new Vue({
        el: '#root',
        data: {
            firstName: '张',
            lastName: '三'
        },
        computed: {
            fullName: {
                //get有什么作用?当有人读取fullName时,get就会被调用,且返回值就作为fullName的值
                //get什么时候调用?1. 初次读取fullName时。 2. 所依赖的数据发生变化时
                get() {
                    console.log('get被调用了')
                    console.log(this) //此处的this就是vm
                    return this.firstName + '-' + this.lastName
                },
                set(value) {
                    console.log('set', value)
                    const arr = value.split('-')
                    this.firstName = arr[0]
                    this.lastName = arr[1]
                }
            }

        }
    })
</script>

在data中写的属性,出现在vm身上的时候依然是属性;在methods中写的方法,出现在vm身上的时候依然是方法;
但是在computed中写的计算属性,计算属性都是一个个的对象,但是出现在vm身上的时候不是对象,而是一个通过Object.defineProperty方法注册上去的属性

修改fullName会调用它的setter方法,在setter内修改了firstName和lastName,即data内的属性发生了变化。这就会引发Vue重新解析模板,重新解析模板的时候,会把数据发生了变化的属性和计算属性更新到模板里。
计算属性的getter和setter都是被Vue管理的函数,所以只能写成普通函数的形式,因为普通函数内的this会指向Vue。而不能写成箭头函数(函数内的this会指向window)的形式。

总结

  1. 定义:要用的属性不存在,要通过已有属性计算得来
  2. 原理:底层借助了Object.defineproperty方法提供的getter和setter
  3. get函数什么时候执行?
    • 初次读取时会执行一次
    • 当依赖的数据发生改变时,会被再次调用
  4. 优势:与methods实现相比,内部有缓存机制(复用),效率更高,调试方便
  5. 备注:
    • 计算属性最终会出现在vm上,直接读取使用即可。
    • 如果计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算时依赖的数据发生改变

如果计算属性,只需要考虑读取,不需要考虑修改。则可以使用计算属性的简写形式

const vm = new Vue({
    el: '#root',
    data: {
        firstName: '张',
        lastName: '三'
    },
    computed: {
        fullName: {
            //完整写法
            //get() {
            //    console.log('get被调用了')
            //    console.log(this) //此处的this就是vm
            //    return this.firstName + '-' + this.lastName
            //},
            //set(value) {
            //    console.log('set', value)
            //    const arr = value.split('-')
            //    this.firstName = arr[0]
            //    this.lastName = arr[1]
            //}

            //简写形式1
            fullName: function () {
                console.log(this) //此处的this就是vm
                return this.firstName + '-' + this.lastName
            }

            //简写形式2
            fullName() {
                console.log(this) //此处的this就是vm
                return this.firstName + '-' + this.lastName
            }
        }

    }
})

标签:Vue,lastName,vm,笔记,getter,计算,fullName,简写,属性
From: https://www.cnblogs.com/Ceri/p/17810808.html

相关文章

  • Vue学习笔记1:Hello World小案例
    1.HelloWorld小案例1.1采用组件化模式,提高代码复用率、且让代码更好维护。1.2声明式编码,让编码人员无需直接操作DOM,提高开发效率。1.3学习Vue之前要掌握的Javascript基础知识ES6语法规范ES6模块化包管理器原型、原型链数组常用方法axiospromiseVSCode插件:Liv......
  • 《AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE》阅
    论文标题《ANIMAGEISWORTH16X16WORDS:TRANSFORMERSFORIMAGERECOGNITIONATSCALE》谷歌论文起名越来越写意了,“一幅图像值16X16个单词”是什么玩意儿。ATSCALE:说明适合大规模的图片识别,也许小规模的不好使作者来自GoogleResearch的Brain团队,经典的同等贡献......
  • 高并发的哲学原理-笔记
    1、开门见山,先说结论,高并发的哲学原理就是——找出单点,进行拆分。要将每一个“大单点”都拆成“一个小单点+多个资源并行”的形式。 2、宏内核和微内核架构https://zhuanlan.zhihu.com/p/394560786https://cloud.tencent.com/developer/article/2021291?areaSource=10200......
  • 《信息安全系统设计与实现》第九周学习笔记
      《信息安全系统设计与实现》第九周学习笔记第五章定时器及时钟服务硬件定时器定时器是由时钟源和可编程计数器组成的硬件设备。时钟源通常是一个晶体振荡器,会产生周期性电信号,以精确的频率驱动计数器。使用一个倒计时值对计数器进行编程,每个时钟信号减1。当计数减为0时......
  • trie(字典树)学习笔记
    trie(字典树)学习笔记trie可以在\(O(nL)\)的时间,\(O(n\left|\Sigma\right|L)\)的空间完成插入,查找字符串。其中\(L\)为字符串长,\(\Sigma\)为字符集inttrie[N][26],tot;inttag[N];voidinsert(){intn=str.size();intu=0;for(inti=0;i<n......
  • 学习笔记8
    知识点归纳个人计算机定时器:指用于计算机系统中的一个工具或功能,用于设置和管理计算机系统中的定时任务或定时操作。个人计算机定时器可以用于多种用途,例如:系统定时关机:可以在一定时间后自动关闭计算机。定时提醒:可以设置定时提醒,例如定时提醒用户休息、完成某个任务等。定......
  • 学习笔记八
    学习笔记八一、作业要求自学教材第5章,提交学习笔记(10分),评分标准如下知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)"我在学*X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题"**核心是......
  • 《信息安全系统设计与实现》第八次学习笔记
    第五章:定时器及时钟服务硬件定时器定时器是由时钟源和可编程计数器组成的硬件设备。时钟源通常是一个晶体振荡器,会产生周期性电信号,以精确的频率驱动计数器。使用一个倒计时值对计数器进行编程,每个时钟信号减1。当计数减为0时,计数器向CPU生成一个定时器中断,将计数值重新加载到......
  • mit6.828 - lab3练习笔记
    PartAExercise1练习1.修改`kern/pmap.c`中的`mem_init()`,分配并映射`envs`数组。该数组由`Env`结构的`NENV`实例组成,分配方式与分配页面数组类似。与页面数组一样,支持`envs`的内存也应在`UENVS`(定义于`inc/mlayout.h`)处映射为用户只读,这样用户进程才能读取该......
  • 《信息安全系统设计与实现》第九周学习笔记
    硬件定时器定时器是由时钟源和可编程计数器组成的硬件设备。时钟源通常是一个晶体振荡器,会产生周期性电信号,以精确的频率驱动计数器。使用一个倒计时值对计数器进行编程,每个时钟信号减1。当计数减为0时,计数器向CPU生成一个定时器中断,将计数值重新加载到计数器中,并重复倒计时。......