ES6 Proxy 用法

语法(MDN链接

1
const p = new Proxy(target, handler)
  • target:要使用 Proxy 包装的目标对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理)。
  • handler:一个通常以函数作为属性的对象,各属性中的函数分别定义了在执行各种操作时代理 p 的行为。

捕获器

handler 对象是一个容纳一批特定属性的占位符对象。它包含有 Proxy 的各个捕获器。所有的捕获器是可选的。如果没有定义某个捕获器,那么就会保留源对象的默认行为。下面我会记录所有捕获器的使用方法,部分不标准或已废弃的的方法没有记录在内。

handler.getPrototypeOf

参数:

  • target:被拦截的对象

触发条件:

  • Object.getPrototypeOf()
  • Reflect.getPrototypeOf()
  • __proto__
  • Object.prototype.isPrototypeOf()
  • instanceof

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class A {}
class B {}

const proxy = new Proxy(new A(), {
getPrototypeOf(target) {
return B.prototype
}
})

Object.getPrototypeOf(proxy) === B.prototype // true
Reflect.getPrototypeOf(proxy) === B.prototype // true
proxy.__proto__ === B.prototype // true
B.prototype.isPrototypeOf(proxy) // true
proxy instanceof B // true

handler.setPrototypeOf

参数:

  • target:被拦截的对象
  • prototype:对象新的原型或者null

返回值:

  • true:修改成功
  • false:修改失败

触发条件:

  • Object.setPrototypeOf()
  • Reflect.setPrototypeOf()

示例:

1
2
3
4
5
6
7
8
9
10
const newProto = {}
const proxy = new Proxy({}, {
setPrototypeOf(target, prototype) {
console.log('Setting prototype ...')
return false
}
})

Object.setPrototypeOf(proxy, newProto) // throws Error
Reflect.setPrototypeOf(proxy, newProto) // returns false

[未完待续 ...]

软路由 NanoPi R4S 踩坑

软路由 NanoPi R4S 踩坑

NanoPi R4S 是友善电子团队推出的一款 Arm 架构的软路由,这是 R2S 的升级版。之前用家里废弃的主机刷过 OpenWrt,但是主机同时需要常年开启,体积大没办法塞进弱电箱,还有功耗、噪音也成问题。这段时间家里准备装修,所以正好借此重新设计一下家里的弱电和网络结构,这款小巧的软路由正好符合我的需求。

网络改造

因为我家户型比小,所以只有一台华硕 R7000 作为主路由 + AP,双核 + 256MB 内存,我跑了一些脚本在里面,爆内存是常有的事,而且重启非常的慢。200兆带宽跑满没什么问题,但是以后想换千兆的话估计不行,而且家里铺的是五类线,需要换成六类以上才不会成为瓶颈。

[未完待续 ...]