handler.construct() 方法主要用于拦截 new 运算命令。
const proxy = new Proxy(target, {construct: function (target, property) {// do something},});
| 参数 | 说明 | 类型 |
|---|---|---|
target | 目标对象 | function |
args | 参数列表 | typed array |
newTarget | 最初被调用的构造函数 | function |
该方法会拦截目标对象的以下操作:
new proxy(...args)Reflect.construct()如果违背了以下的约束,proxy 会抛出 TypeError 异常:
下面代码演示如何拦截 new 操作符
const proxy = new Proxy(function () {}, {construct: function (target, args, newTarget) {console.log('Called:' + args.join(', '));return { value: args[0] * 10 };},});console.log(new proxy(1).value);// 'Called: 1'// 10
下面代码违反了约定,没有返回一个对象:
const proxy = new Proxy(function () {}, {construct: function (target, args, newTarget) {return 1;},});new proxy();// Uncaught TypeError: 'construct' on proxy: trap returned non-object ('1')