本文摘自PHP中文网,作者Guanhui,侵删。
JavaScript 魔术方法
这个脚本使用 Proxy 实现了在 JavaScript 中使用类似于 PHP 中的魔术方法。
示例
你可以这样使用它:
1 2 3 4 5 6 7 8 9 10 11 |
|
如果你使用的是像 Babel 这样的 JavaScript 编译器,并启用了装饰器, 你还可以使用 magicMethods 函数作为装饰器:
1 2 3 4 |
|
支持魔术方法
给定一个类 Class 和 instance,以下是此脚本支持的魔术方法:
__get(name)
当尝试访问 instance[name],而 name 不是 instance 中的属性时,调用。
注意: 在 PHP 中,检查 instance 中是否存在 name 不会使用任何自定义的 __isset() 方法。
__set(name, value)
当尝试使用 instance[name] = ...,而 instance 并未设置 name 属性时,调用该方法。
__isset(name)
当尝试通过调用 name in instance 来检查是否存在 name 是否存在时,调用该方法。
__unset(name)
当尝试通过 delete instance[name] 来取消 name 属性设置时,调用该方法。
其他方法
下面的魔术方法是通过该脚本提供支持的,但不支持在 PHP:
static __getStatic(name)
类似于 __get(),但是它用在 Class 而不是 instance.
static __setStatic(name, value)
类似于 __set(),但是用在 Class 中而不是 instance。
为什么不支持魔术方法 X?
它们不是没有必要就是不实用:
相关阅读 >>
一起来聊聊jquery、javascript与js三者间的区别
更多相关阅读请进入《js》频道 >>
Vue.js 设计与实现 基于Vue.js 3 深入解析Vue.js 设计细节
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者