• Vue学习:回顾Object.defineProperty(给对象添加或者定义属性的)


    1. <script>
    2. //定义对象
    3. let person={
    4. name:'李四',
    5. sex:"男"
    6. }
    7. Object.defineProperty(person,'age',{value:18});//参数:添加属性的对象 添加的属性名 配置项
    8. console.log(person)
    9. script>

     

     颜色不同:说明了age不可以枚举===age属性不参与遍历 

    Object.keys(person):对象的所有对象的属性提取出来 作为数组

    1. <script>
    2. //定义对象
    3. let person={
    4. name:'李四',
    5. sex:"男"
    6. }
    7. Object.defineProperty(person,'age',{value:18});//参数:添加属性的对象 添加的属性名 配置项
    8. console.log(Object.keys(person))//传入对象 :对象的所有对象的属性提取出来 作为数据
    9. console.log(person)

    发现遍历不到 Object.defineProperty(person,'age',{value:18});//参数:添加属性的对象 添加的属性名 配置项 添加的属性

     使用for in

    1. for(let key in person){
    2. console.log(person[key])//遍历数组或者对象
    3. }

     


    那么如何做到可以枚举或者枚举(使用相同的方法,借用配置项) enumerable:true可枚举

    enumerable控制属性可枚举 默认false

    1. //定义对象
    2. let person = {
    3. name: '李四',
    4. sex: "男"
    5. }
    6. Object.defineProperty(person, 'age', { value: 18 });//参数:添加属性的对象 添加的属性名 配置项
    7. console.log(Object.keys(person))//传入对象 :对象的所有对象的属性提取出来 作为数据
    8. console.log(person)
    9. for(let key in person){
    10. console.log(person[key])//遍历数组或者对象
    11. }
    12. Object.defineProperty(person, 'dad', { value: "Jhon" ,enumerable:true});//参数:添加属性的对象 添加的属性名 配置项
    13. console.log(person)


     

    直接写:可以更改,但是defineProperty使用这个的属性不可以被更改 需要添加一个属性writable:控制属性是否可以被修改

    1. //定义对象
    2. let person = {
    3. name: '李四',
    4. sex: "男"
    5. }
    6. Object.defineProperty(person, 'age', { value: 18 });//参数:添加属性的对象 添加的属性名 配置项
    7. console.log(Object.keys(person))//传入对象 :对象的所有对象的属性提取出来 作为数据
    8. console.log(person)
    9. for(let key in person){
    10. console.log(person[key])//遍历数组或者对象
    11. }
    12. Object.defineProperty(person, 'dad', { value: "Jhon" ,
    13. enumerable:true,
    14. writable:true});//参数:添加属性的对象 添加的属性名 配置项
    15. console.log(person)

     


    正常写可以被删除 但是defineProperty不可以删除

     

     defineProperty里面的属性configurable: true,控制属性是否可以被删除:默认false

    1. //定义对象
    2. let person = {
    3. name: '李四',
    4. sex: "男"
    5. }
    6. Object.defineProperty(person, 'age', { value: 18 });//参数:添加属性的对象 添加的属性名 配置项
    7. console.log(Object.keys(person))//传入对象 :对象的所有对象的属性提取出来 作为数据
    8. console.log(person)
    9. for (let key in person) {
    10. console.log(person[key])//遍历数组或者对象
    11. }
    12. Object.defineProperty(person, 'dad', {
    13. value: "Jhon",
    14. enumerable: true,
    15. writable: true,
    16. configurable: true,
    17. });//参数:添加属性的对象 添加的属性名 配置项
    18. console.log(person)

     


     defineProperty可以对属性增加限制


    此方法不行:需要age属性 和读取number的值  

    1. let number=18;
    2. //定义对象
    3. let person = {
    4. name: '李四',
    5. sex: "男",
    6. age:number
    7. }

     

    直接设置遍历值,但是后期更改的时候 不随更改而变化 

     

    需要重新执行 person的赋值操作 

     

     需要用到一个defineProperty里面的函数get :

    1. let number=18;
    2. //定义对象
    3. let person = {
    4. name: '李四',
    5. sex: "男",
    6. }
    7. Object.defineProperty(person, 'age', {
    8. get:function(){
    9. return number
    10. }
    11. });//参数:添加属性的对象 添加的属性名 配置项
    12. console.log(person)

        当有人读取该属性的age属性时,get函数就会被调用,且返回值就是age的值(建立了number和peson.age的关联  重新读取 number)

     点击...调用属性getter===get属性+函数

    返回值是多少就是多少的值,找getter去询问

    重新询问,就会重新调用getter,返回就是ages属性的值 

     

    1. get:function(){
    2. return number
    3. },

    简写:一般

    1. get(){
    2. return number
    3. },

    get函数建立了number和person的关联,但是没有建立person和number的关联

     

     

    set函数=setter就会被调用:当有人修改person的age属性时,返回值就是age的值。且回收到修改的值

    读取的还是number的值 所以需要变成重新赋值给number 

    1. let number = 18;
    2. //定义对象
    3. let person = {
    4. name: '李四',
    5. sex: "男",
    6. }
    7. Object.defineProperty(person, 'age', {
    8. // 当有人读取该属性的age属性时,get函数就会被调用,且返回值就是age的值
    9. get() {
    10. return number
    11. },
    12. //简写
    13. //set函数=setter就会被调用:当有人修改person的age属性时,返回值就是age的值。且回收到修改的值
    14. set(value) {
    15. console.log('有人修改了age属性,value=', value);
    16. number = value;
    17. }
    18. });//参数:添加属性的对象 添加的属性名 配置项
    19. console.log(person)

     

  • 相关阅读:
    python 性能优化实例练习
    电压掉电监测电路-三极管电路分析
    超高荧光量子产率近红外金纳米团簇
    看过来,Windows 11 Insider Preview 25231.1000推送啦!
    肖sir__mysql之子查询语句__006
    springboot物流配货管理系统java
    使用Mongoose populate实现多表关联存储与查询,内附完整代码
    UE4 回合游戏项目 05- 战斗场景-向指定敌人移动
    力扣1.两数之和(JavaScript版本)
    数学建模 —— 数学规划模型(5)
  • 原文地址:https://blog.csdn.net/weixin_47295886/article/details/128192714