使用proxy来调用未定义的属性方法
当我们调用一个函数的未定义属性时会报错。那么可以使用一个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来调用未定义的属性方法相关推荐
- php类中使用未定义的属性说明
一般情况下,在类中要使用一个属性,最好是先申明这个属性.否则就是给自己的挖坑了. 先来看以下一段代码, <?php class test_class{public function out(){ ...
- php mssql 错误,PHP致命错误:调用未定义的函数mssql_connect()
PHP致命错误:调用未定义的函数mssql_connect() 我从来没有使用过PHP,并试图连接到运行IIS7和PHP5.3的Windows机器上的SQL Server 2008实例. 我已经从C: ...
- yii2 调用未定义函数_Python 函数(三) 使用规则
一.调用函数使用规则 python函数的应用一般需要:先定义.后调用 ,否则将报错提示[name '*' is not defined]未定义名称.但进行函数定义时调用函数不受此限制. 错误示例:先 ...
- python3中input()方法报错traceback变量未定义的解决方法
python3中input()方法报错traceback变量未定义的解决方法 参考文章: (1)python3中input()方法报错traceback变量未定义的解决方法 (2)https://ww ...
- php属性未定义,PHP-警告-未定义的属性:stdClass-修复?
我在错误日志中收到此警告,并想知道如何在代码中更正此问题. 警告:PHP注意:未定义属性:stdClass :: $ records在440行的script.php中 一些代码: // Parse o ...
- vc6.0 mfc一些函数明明调用语法正确,但是提示函数或者函数参数未定义等问题解决方法。
使用vc6.0 mfc 编写程序时一些函数在正常声明.调用的情况下提示函数参数未定义等问题时 如调用EnumDisplayMonitors()会提示下面问题 运行后,出现以下问题: Compiling ...
- java方法未定义类型_java - 方法未定义为类 - SO中文参考 - www.soinside.com
我试图在eclipse中运行一个使用名为getArea(一个对象)的方法的代码.我目前收到错误说 对于getArea(ComparableRectangle)类型,方法RectangleTest未定义 ...
- php引用类失败,php – 致命错误:调用未定义的方法stdClass
我得到一个错误说 Fatal error: Call to undefined method stdClass::mysql_con() in ---./-/includes/script/impor ...
- html文件中未定义属性名错误,错误:无法读取未定义的属性已检查
我正在尝试将已选中复选框的结果存储在本地存储中,但是当我尝试保存时,我得到上面提到的错误. 不太确定什么是未定义的,因为我在代码中看到了属性.这是代码: var getCheckboxValue = ...
最新文章
- java线程 yield_Java线程中yield与join方法的区别
- python使用教程cmd啥意思-python中执行cmd的方式
- (转)事务是什么,以及事务四个特性
- window.onload和3的小游戏
- MATLAB——阈值分割(一)
- why fioriSandboxConfig.json is loaded twice
- C++ 重载运算符 继承 多态 (超详细)
- element ui表单校验prop的链式写法----源码分析
- 牛年喜庆红色字体标题PSD素材!
- Velocity - 单例还是非单例
- k阶原点距和k阶中心距各是说明什么数字特征
- String.format(“0:D2}“,a)字符串格式化
- Android9王者荣耀卡顿,王者荣耀卡顿掉帧?教你如何让王者荣耀流畅爆表
- rzsz的编译安装及SecureCR下Zmodem传输用法
- cs224n课程及NLP相关知识记录
- python卸载pip_python 怎样卸载pip
- 天翼云服务器ubuntu20.04安装Mysql记录
- 大学生如何合理利用计算机,大学生如何安排自己的课余时间?6招,学霸教会你正确使用手机...
- 2019年给Java编程初学者的建议(附学习大纲)
- GPS网络时间服务器(NTP时钟系统)技术应用方案
热门文章
- 全卷积网络(FCN)与图像分割
- Day 12 你离开家时最想念的东西
- PMP-【第2章 项目运行环境与项目经理】-2020-12-29(35页-48页)
- 190空难_印度空难有确诊者罹难,22名现场搜救人员惨中招
- 泰拉瑞亚服务器权限文件,泰拉瑞亚云服务器权限
- js php滚动图代码,JavaScript_JS实现的N多简单无缝滚动代码(包含图文效果),本文实例讲述了JS实现的N多简 - phpStudy...
- 项目集跟进计划_项目延期,项目经理应该如何补救?
- Oracle根据符合条件的数据循环批量更新
- sed的基本用法和高级用法
- 在大公司工作3年以上的人,如何摆脱螺丝钉的现实?