nodejs如何利用Proxy无中生有,给原变量添加新方法?
发布于 作者:苏南大叔 来源:程序如此灵动~

proxy
对待原变量的属性的态度是:如果是原版的属性,那么不改变原变量属性,只改变代理自身。如果不是原版的属性,那么会透传给原变量。真心是贴心亲密无间好的合作伙伴啊。那么,本文中,将讨论的内容是proxy
如何对待原变量的方法,如何给原变量添加新的方法。

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验文章。本文继续讨探js
中的proxy
功能。测试环境:win10
,node@
。本次在node
环境下执行本文测试,不是在浏览器环境下了。
测试代码
在前文中,苏南大叔写了关于proxy
对于set
和get
的态度和处理方式。参考:
基于上一篇文章里面的代码,新的测试代码如下:

proxy执行原变量方法
如果有原变量定义了一些方法,那么,这些方法必然是可以在新的代理变量里面被执行的。
所以下面的代码可以顺利执行:
输出:
proxy透传新方法
如果想在给原变量添加新的方法,那么,并不是在handler
里面定义的。所以,下面的代码会报错。

也可以侧面推断:原变量和新的代理变量,两者并不是简单的合并。否则在handler
里面定义的新方法必然是可以生效的。它的新方法是下面这样生效的:
从代码的运行结果上看,这个新添加的方法是可以透传回原变量的,原变量也有了新的方法能力。
输出:
proxy覆盖原方法
对于原有的方法,是否可以改写呢?答案是可以。就是把生成新方法的代码,稍稍改动一下,使用同名函数即可。
输出:

特别强调
这种通过proxy
添加的新方法,对于变量属性的获取,也是会遵守handler
里面的定义的。比如:
输出是:

参考文献
结束语
本文的结论是这样的:proxy
对待对象的方法的态度,和对待属性的态度是一致的。如果存在,则可继承也可以单独发挥。如果不存在,则可以透传回去,让本体具有相同能力。


