zoukankan      html  css  js  c++  java
  • 对象代理Proxy和Object.definedProperty的区别

    一、Object.defineProperty

    1.Object.defineProperty([object],[property],[descriptor])

    • 参数一:你需要操作的对象

    • 参数二:你要的定义的属性名

    • 配置项,等同与常用语参数的配置的configure 这里的descriptor是一个配置的对象,对象的value属性的值就是用于设置你要添加的那个属性的值。

    2.Object.defineProperties ([object],[properties]) 可用于一次向对象上添加多个属性

    • 参数一: 需要操作的对象

    • 参数二:properties是一个对象 ,添加的属性以对象的形式进行相关的配置操作

      <!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="UTF-8" />
          <meta name="viewport" content="width=device-width, initial-scale=1.0" />
          <title>Document</title>
        </head>
        <body>
          <script>
            function defineProperty() {
              var _obj = {}
              Object.defineProperties(_obj,{
                name:{
                  value:'重庆吴彦祖',
                  writable:false, // wirtable 默认值为false,所以用Object.properties/property定义的属性是不能修改的,将writable的值改为true,可对定义的属性值进行修改
                  enumerable:true  
                },
                age:{
                  value:22,
                  writable:true,
                  enumerable:true
                }
              })
              return _obj
            }
            var person1 = defineProperty()
            person1.name='刘德华'
            person1.age=18
            console.log(person1)
          </script>
        </body>
      </html>
      
      

    tips:

    • Object.property/properties属性值不能修改
    • 属性不可枚举
    • 属性不可删除

    解决Object.properties 的属性不能修改的方法,在配置属性的时候将writable值改为true

    解决Object.properties 的属性不能枚举的方法,在配置属性的时候将enumerable值改为true

    解决Object.properties 的属性不能删除的方法,在配置属性的时候将configurable值改为true

    ***注意:上述所述的不能对属性进行修改、枚举、删除的操作,只针对于是通过Object.defineProperty方法定义的属性,如果本来对象里面就存在的属性是不具备上面说的这些情况。

    二、Proxy 对象代理

    基本使用 var proxy = new Proxy([object],[handler])

    参数【object】 需要进行的代理 【handler】 --》为一个配置对象

    var monkey = {
            name: '我是一只猴子',
            age: '未知',
            fly() {
              console.log('一个跟斗就可以飞十万八千里')
            },
          }
          var proxy = new Proxy(monkey, {
            get(monkey, prop) {
              return monkey[prop]
            },
            set(monkey, prop, newValue) {
              monkey[prop] = newValue
            },
          })
          monkey.name='齐天大圣' // 注意:这里的坑,只要用了Proxy进行代理了的对象,后面不管是通过源对象的方式还是Proxy对象的方式设置里面的属性,都是走的Proxy里面的set 和 get方法了
          console.log(monkey)
          console.log(proxy)
    
  • 相关阅读:
    spring源码下载
    java资料共享
    《Linux命令行与shell脚本编程大全》读书笔记
    《微服务设计》读书笔记
    tornado关于AsyncHTTPClient的使用笔记
    java stackoverflowerror与outofmemoryerror区别(转)
    JAVA关于泛型的笔记
    在JAVA中返回类型使用泛型T和Object有什么区别?
    《构架师的12项修炼》读书笔记
    关于控制台输入的代码怎么跑单元测试的问题记录
  • 原文地址:https://www.cnblogs.com/comyan/p/13572257.html
Copyright © 2011-2022 走看看