码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • proxy 代理对象 set get delete has ownkeys


    目录

    proxy的概念

    语法

    handler对象的方法

    get

    set

    deleteProperty


    proxy的概念

    Proxy 对象用于创建一个对象的代理,从而实现基本操作的拦截和自定义(如属性查找、赋值、枚举、函数调用等)。

    proxy在目标对象的外层搭建了一层拦截,外界对目标对象的某些操作(后文会说明,有哪些操作可以拦截),必须通过这层拦截。

    语法

    var proxy = new Proxy(target, handler);

    target

    要使用 Proxy 包装的目标对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理)。

    handler

    一个通常以函数作为属性的对象,各属性中的函数分别定义了在执行各种操作时代理的行为。

    注意:当我们配置好代理后,应该避免操作 原对象 ,而是操作 配置好的代理对象

    1. let obj = {...}
    2. let proxy = new Proxy(obj,{...})

    比如现在我们需要操作 proxy 而不是 obj

    handler对象的方法

    get

    拦截对象的读取属性操作。

    三个参数:

    target: 目标对象,

    property: 被获取的属性名,

    receiver: Proxy 或者继承 Proxy 的对象

    函数中 return 的是读取对象属性时 拿到的值:正常返回如下

    1. var per = new Proxy({name:"张三",age:16}, {
    2. get: function(target, property, receiver) {
    3. return target[property]
    4. }
    5. });

    比如他的年龄不到 18 不让他读取值

    1. var per = new Proxy({name:"张三",age:16}, {
    2. get: function(target, property, receiver) {
    3. if(target.age < 18){
    4. return "未成年"
    5. }
    6. return target[property]
    7. }
    8. });

    set

    拦截设置属性值操作 包括新增 修改

    四个参数:

    target: 目标对象,

    property: 被获取的属性名,

    value: 新属性值,

    receiver: Proxy 或者继承 Proxy 的对象

    函数中 return 的是是否修改成功,修改成功需要 return true 否则 返回 false

    在严格模式下,如果 set() 方法返回 false,那么会抛出一个 异常。

    1. let proxy = new Proxy({name:"张三",age:16},{
    2. set(target,property,value){
    3. if(property == 'name'&&target.age< 18){
    4. console.log("未成年人不允许改名字");
    5. } else { target[property] = value }
    6. }
    7. })

    deleteProperty

  • 相关阅读:
    会编程的少年有多厉害?8岁女儿写代码哄程序员爸爸开心,网友直呼:破防了
    Flink Yarn Per Job - Yarn应用
    虹科方案 | 虹科基于空口测试的新型5G毫米波测试方案
    打破界限,释放创新:一键将HTML转化为PDF
    Python imgaug库的使用
    windows 构建nginx本地服务随系统自启
    MyBatis框架简介
    二代水务系统架构设计分享——DDD+个性化
    软件测试/测试开发丨明确的编码规范,避免冗余和混乱
    2024年火爆全网的三款ai智能直播系统,你知道哪一种?
  • 原文地址:https://blog.csdn.net/paidaboluo/article/details/126321172
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号