当我们调用一个函数的未定义属性时会报错。那么可以使用一个proxy拦截,并且传入dispatch函数,来使当调用未定义属性时,执行dispatch函数。

原理:

创建一个实例:function createInstance(target:object, dispatch:Functin)
将dispatch绑定到target的一个属性上,最好这个属性名使用Symbol防止重复

const NAME =Symbol('DISPATCH')
Object.assign(target, { [Name]: dispatch } )
return new Proxy(target, handler)

这里的handler是还没有写的,应该至少包括get和apply属性
在调用target的属性时,可以使用get来进行拦截key,判断是否未定义
如果未定义可以设置 handler的属性值 ifundefined = true,这个ifundefined值会在proxy的apply出产生作用。
当我们调用属性方法时,会被handler的apply拦截。apply拦截后判断ifundefined是否为true,如果为true表示:这个属性未定义,调用dispatch函数,即调用target[NAME]。并把args传给apply中。在apply中使用call调用方法

  public apply(target: object, ctx: any, args: any[]) {//调用对象的时候调用dispatch方法const dispatch = target[NAME]return dispatch.call(thisArg, this.keys, args)}

这样的话就起到了调用未定义属性时执行指定函数的函数的作用

使用proxy来调用未定义的属性方法相关推荐

  1. php类中使用未定义的属性说明

    一般情况下,在类中要使用一个属性,最好是先申明这个属性.否则就是给自己的挖坑了. 先来看以下一段代码, <?php class test_class{public function out(){ ...

  2. php mssql 错误,PHP致命错误:调用未定义的函数mssql_connect()

    PHP致命错误:调用未定义的函数mssql_connect() 我从来没有使用过PHP,并试图连接到运行IIS7和PHP5.3的Windows机器上的SQL Server 2008实例. 我已经从C: ...

  3. yii2 调用未定义函数_Python 函数(三) 使用规则

    ​一.调用函数使用规则 python函数的应用一般需要:先定义.后调用 ,否则将报错提示[name '*' is not defined]未定义名称.但进行函数定义时调用函数不受此限制. 错误示例:先 ...

  4. python3中input()方法报错traceback变量未定义的解决方法

    python3中input()方法报错traceback变量未定义的解决方法 参考文章: (1)python3中input()方法报错traceback变量未定义的解决方法 (2)https://ww ...

  5. php属性未定义,PHP-警告-未定义的属性:stdClass-修复?

    我在错误日志中收到此警告,并想知道如何在代码中更正此问题. 警告:PHP注意:未定义属性:stdClass :: $ records在440行的script.php中 一些代码: // Parse o ...

  6. vc6.0 mfc一些函数明明调用语法正确,但是提示函数或者函数参数未定义等问题解决方法。

    使用vc6.0 mfc 编写程序时一些函数在正常声明.调用的情况下提示函数参数未定义等问题时 如调用EnumDisplayMonitors()会提示下面问题 运行后,出现以下问题: Compiling ...

  7. java方法未定义类型_java - 方法未定义为类 - SO中文参考 - www.soinside.com

    我试图在eclipse中运行一个使用名为getArea(一个对象)的方法的代码.我目前收到错误说 对于getArea(ComparableRectangle)类型,方法RectangleTest未定义 ...

  8. php引用类失败,php – 致命错误:调用未定义的方法stdClass

    我得到一个错误说 Fatal error: Call to undefined method stdClass::mysql_con() in ---./-/includes/script/impor ...

  9. html文件中未定义属性名错误,错误:无法读取未定义的属性已检查

    我正在尝试将已选中复选框的结果存储在本地存储中,但是当我尝试保存时,我得到上面提到的错误. 不太确定什么是未定义的,因为我在代码中看到了属性.这是代码: var getCheckboxValue = ...

最新文章

  1. java线程 yield_Java线程中yield与join方法的区别
  2. python使用教程cmd啥意思-python中执行cmd的方式
  3. (转)事务是什么,以及事务四个特性
  4. window.onload和3的小游戏
  5. MATLAB——阈值分割(一)
  6. why fioriSandboxConfig.json is loaded twice
  7. C++ 重载运算符 继承 多态 (超详细)
  8. element ui表单校验prop的链式写法----源码分析
  9. 牛年喜庆红色字体标题PSD素材!
  10. Velocity - 单例还是非单例
  11. k阶原点距和k阶中心距各是说明什么数字特征
  12. String.format(“0:D2}“,a)字符串格式化
  13. Android9王者荣耀卡顿,王者荣耀卡顿掉帧?教你如何让王者荣耀流畅爆表
  14. rzsz的编译安装及SecureCR下Zmodem传输用法
  15. cs224n课程及NLP相关知识记录
  16. python卸载pip_python 怎样卸载pip
  17. 天翼云服务器ubuntu20.04安装Mysql记录
  18. 大学生如何合理利用计算机,大学生如何安排自己的课余时间?6招,学霸教会你正确使用手机...
  19. 2019年给Java编程初学者的建议(附学习大纲)
  20. GPS网络时间服务器(NTP时钟系统)技术应用方案

热门文章

  1. 全卷积网络(FCN)与图像分割
  2. Day 12 你离开家时最想念的东西
  3. PMP-【第2章 项目运行环境与项目经理】-2020-12-29(35页-48页)
  4. 190空难_印度空难有确诊者罹难,22名现场搜救人员惨中招
  5. 泰拉瑞亚服务器权限文件,泰拉瑞亚云服务器权限
  6. js php滚动图代码,JavaScript_JS实现的N多简单无缝滚动代码(包含图文效果),本文实例讲述了JS实现的N多简 - phpStudy...
  7. 项目集跟进计划_项目延期,项目经理应该如何补救?
  8. Oracle根据符合条件的数据循环批量更新
  9. sed的基本用法和高级用法
  10. 在大公司工作3年以上的人,如何摆脱螺丝钉的现实?