• 取值函数(getter)和存值函数(setter)


    取值函数getter和存值函数setter

    get和set是两个关键字,用于对某个属性设置存值函数和取值函数,拦截该属性的存取行为。

    那么,这两个东西要怎么用呢?而且他们和我们的平日里写的业务又是怎么练习起来的呢?
    首先,我们先看一段恩简单的代码:

       var person={
            myname:''
        }
       person.myname='lsh'
       console.log(person.myname);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    相信大家一眼就看出来了,控制台打印的结果是lsh,那么如果我们把它改写成取值函数和存执函数要怎么写呢?
    代码如下:

          var name = ""
          var person = {
            get myname() {
              console.log("我叫" + name)
              return name
            },
            set myname(val) {
              console.log("我叫" + name)
              name = val
            },
          }
          person.myname = "lsh"
          console.log(person.myname)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    我们只需要使用对象.函数名就可以调用取值函数和取值函数了。
    当你明白了get与set函数的使用后,肯定会想上面第一段代码那么简单,谁会去用第二段代码,又多又不好理解,我只想说,你想的太简单了,哈哈哈~~~~
    接着看:

    使用get与set函数有两个好处

    使用get与set函数有两个好处:

    1. 在读取或者设置对象的某一个属性的时候,可以进行拦截,中间可以进行其他的操作,比如处理一些业务逻辑
    2. 在vuex中对state中的数据进行缓存
    3. 可以装bei(在小白面前)

    对于第一个好处上面已经演示过了,这里要解释一下第二个好处:
    对于做过vue项目的同学,或许在store文件夹下的index.js文件中见过下面的代码,下面的代码中就用到了get与set函数

    export default new Vuex.Store({
      state: {
        get UserToken() {
          return localStorage.getItem("token")
        },
        set UserToken(value) {
          localStorage.setItem("token", value)
        },
      },
      mutations: {
        LOGIN_IN(state, token) {
          state.UserToken = token
        },
        LOGIN_OUT(state) {
          state.UserToken = ""
        },
      },
      modules,
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    这个东西出现在vuex中,vuex就是进行数据的集中式处理,可以是的数据进行全局访问的,那么为什么又要用到localstorage呢,那么又为什么要用get和set方法呢?

    首先我们要明确一点在vuex中使用本地存储,目的并不是实现数据的共享(store已经实现了全局共享),而是实现vuex所管理的数据进行本地存储(众所周知,vuex存储的数据刷新页面后数据会丢失)。

    如果我们将mutations的值些写为一个下面的这个样子,也是可以实现数据在全局的共性,一点也不耽误操作它:
    在这里插入图片描述
    但是有一个很重要的一点,刷新页面后usertoken就变成空了,为了解决这个问题,就必须使用本地存储,那么本地存储应该如何与vuex相结合起来呢,那就必须要用到下面的写法了,然后就用到了get与set函数了。

    export default {
        get UserToken(){
            return localStorage.getItem('token');
        },
        set UserToken(value){
            localStorage.setItem('token',value)
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    然后就完美解决问题了。
    最后代码就变成了这样子:

    import Vue from 'vue'
    import Vuex from 'vuex'
    import state from "./defaultState"
    import mutations from "./mutations"
    import modules from "./modules"
    
    Vue.use(Vuex)
    
    export default new Vuex.Store({
        state,
        mutations,
        modules
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    工厂设计模式
    积分体系和营销活动结合在一起有哪些玩法
    Python文件操作及光标移动介绍
    2022年最新山西建筑施工架子工(建筑特种作业)模拟考试试题及答案
    SIP没有摘机消息可以通话吗
    【开题报告】基于微信小程序的时空胶囊系统的设计与实现
    linux系统zabbix监控配置钉钉告警
    一口气说出 Redis 16 个常见使用场景
    南大通用数据库-Gbase-8a-学习-05-通过审计日志抓取Sql、Trace日志查看执行计划
    linux权限维持(三)
  • 原文地址:https://blog.csdn.net/ksjdbdh/article/details/126236783