hincky的主页 hincky的主页
  • 学习笔记

    • Vue笔记
    • Vuepress
    • nginx
  • 语言类

    • java
    • go
    • python
    • 设计模式
  • 框架类

    • Spring
    • Spring Security
    • Mybatis
  • 容器技术

    • docker
    • k8s
    • helm
    • prometheus
    • grafana
    • jenkins
  • 命令集合

    • linux命令
    • docker命令
    • git命令
    • vim命令
    • k8s命令
  • 数据库

    • sql
    • mysql
  • 协议

    • 网络模型
    • http/1.1
    • WebSocket
    • http/2
    • TLS/SSL
    • tcp
    • IP
    • tcpdump抓包命令
    • wireshark抓包工具
  • 通用

    • Git
  • 技术分享

    • git push/pull总是超时怎么办
    • idea debug技巧
    • postman使用
    • 问题总结
    • idea使用技巧
  • Oauth2

    • Oauth2原理
  • 项目列表

    • redis项目
    • 微服务项目
  • 分类
  • 标签
  • 归档
  • 随笔
GitHub (opens new window)

Hincky

当有趣的人,做想做的事
  • 学习笔记

    • Vue笔记
    • Vuepress
    • nginx
  • 语言类

    • java
    • go
    • python
    • 设计模式
  • 框架类

    • Spring
    • Spring Security
    • Mybatis
  • 容器技术

    • docker
    • k8s
    • helm
    • prometheus
    • grafana
    • jenkins
  • 命令集合

    • linux命令
    • docker命令
    • git命令
    • vim命令
    • k8s命令
  • 数据库

    • sql
    • mysql
  • 协议

    • 网络模型
    • http/1.1
    • WebSocket
    • http/2
    • TLS/SSL
    • tcp
    • IP
    • tcpdump抓包命令
    • wireshark抓包工具
  • 通用

    • Git
  • 技术分享

    • git push/pull总是超时怎么办
    • idea debug技巧
    • postman使用
    • 问题总结
    • idea使用技巧
  • Oauth2

    • Oauth2原理
  • 项目列表

    • redis项目
    • 微服务项目
  • 分类
  • 标签
  • 归档
  • 随笔
GitHub (opens new window)
  • Vue笔记

    • 基础

      • MVVM模式
      • 生命周期
        • Demo
        • 生命周期图示
      • 计算属性 vs 方法 vs 侦听属性
      • v-if vs v-show
      • 列表渲染之数组、对象更新检测
        • 数组更新检测
          • 变异方法 (mutation method)
          • 替换数组
          • 注意事项
        • 对象变更检测注意事项
        • 总结
    • 组件

    • 过渡&动画

    • 可复用性&组合

    • 工具

    • 规模化

    • Vuex

    • 其他

  • vuepress

  • nginx

  • 前端
  • vue
  • vue核心
hincky
2022-10-29
目录

对象定义

# Object.defineProperty定义对象属性

let person = {
    name: 'tom',
    sex: 'female',
    //age: 17,
}

Object.defineProperty(person,'age',{
    value:17
})


console.log(Object.keys(person))

console.log(person)
1
2
3
4
5
6
7
8
9
10
11
12
13
14

可以通过Object.defineProperty去定义js对象中新的属性以及属性值

Object.defineProperty三要素

  • 对象 person
  • 属性 'age'
  • 值 {value:17}

# Object.keys枚举获取对象属性

console.log(Object.keys(person))
//["name","sex","age"]
1
2

person是传入对象,作为参数传到keys里面。keys可以将对象里所有属性名提取成一个数组

# 区别

直接在let person里面写死的属性,可以通过枚举来获取对象的每个属性

console.log(Object.keys(person))
//["name","sex","age"]
1
2

通过Object.defineProperty定义的属性,就不通过枚举获取了

console.log(Object.keys(person))
//["name","sex"]
1
2

# Object.defineProperty的高级定义

其他高级属性配置

Object.defineProperty(person,'age',{
    value:17
    enumerable:true,   //控制属性可否被枚举,默认false
    writale:true,      //控制属性可否被修改,默认false
    configurable:ture  //控制属性可否被删除,默认false
})
console.log(Object.keys(person))
//["name","sex","age"]
1
2
3
4
5
6
7
8

getter配置,get:function()可以简写成get()

let number = 16
let person = {
    name: 'tom',
    sex: 'female',
}
//给person添加新属性age,通过getter来直接返回数值,也可返回变量number,再用变量赋值给age
Object.defineProperty(person,'age',{
    //当读取person的age属性时,get函数(getter)被调用,且返回值就是age的值
    get:function(){
        // return 16
        return number
    }

    //当修改person的age属性时,set函数(setter)被调用,且会收到修改的具体值
    set(value){ 
        //要同步修改age的值,就将value赋值给number即可
        number=value
    }
})
console.log(Object.keys(person))
//["name","sex","age"]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
编辑 (opens new window)
#Vue#Vue核心
最近更新
01
人生前期重要的能力
05-17
02
防火墙命令
04-11
03
docker-compose部署mysql主从集群
03-22
更多文章>
Theme by Vdoing | Copyright © 2022-2023 Hincky | MIT License | 粤ICP备2022120427号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式