在 JS 中使用类似 PHP 的魔术方法


本文摘自PHP中文网,作者Guanhui,侵删。

JavaScript 魔术方法

这个脚本使用 Proxy 实现了在 JavaScript 中使用类似于 PHP 中的魔术方法。

示例

你可以这样使用它:

1

2

3

4

5

6

7

8

9

10

11

const Foo = magicMethods(class Foo {

  constructor () {

    this.bar = 'Bar'

  }

  __get (name) {

    return `[[${name}]]`

  }

})

const foo = new Foo

foo.bar // "Bar"

foo.baz // "[[baz]]"

如果你使用的是像 Babel 这样的 JavaScript 编译器,并启用了装饰器, 你还可以使用 magicMethods 函数作为装饰器:

1

2

3

4

@magicMethods

class Foo {

  // ...

}

支持魔术方法

给定一个类 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?

它们不是没有必要就是不实用:

阅读剩余部分

相关阅读 >>

变量必须以什么开头javascript

js怎么添加css样式

nginx 怎么实现js css 不缓存

微信js是什么

示例js 数组和对象的深拷贝操作

jsp调用javascript方法是什么

js classname如何修改class属性

利用html+css+js实现简单的点赞效果

一起来聊聊jquery、javascript与js三者间的区别

巧妙的给div、p标签添加onload事件

更多相关阅读请进入《js》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...