Proxy.handler.construct
handler.construct() 方法用于拦截new操作. 为了使新的操作在生成的Proxy对象上有效,用于初始化代理的目标本身必须具有[[Construct]]内部方法(即new target必须是有效的)。
语法
var p = new Proxy(target, {
construct: function(target, argumentsList, newTarget) {
}
});参数
下面的参数被传递给construct方法,this绑定在handler上.
target目标对象
argumentsList用于construct的参数列表
newTarget最初被调用的构造函数,就上面的例子而言指的是p.
返回值
construct方法必须返回一个对象.
描述
handler.construct()方法用于拦截new.
拦截
该拦截器可以拦截以下操作:
new proxy(...args)
Reflect.construct()
约束
如果违反以下约定,代理将会抛出错误TypeError:
- 结果必须是
Object。
示例
以下代码捕获new运算符。
var p = new Proxy(function() {}, {
construct: function(target, argumentsList, newTarget) {
console.log('called: ' + argumentsList.join(', '));
return { value: argumentsList[0] * 10 };
}
});
console.log(new p(1).value); // "called: 1"
// 10以下代码违反了不变量。
var p = new Proxy(function() {}, {
construct: function(target, argumentsList, newTarget) {
return 1;
}
});
new p(); // TypeError is thrown以下代码不正确地初始化代理。将target在代理初始化本身必须是一个有效的构造函数new操作。
var p = new Proxy({}, {
construct: function(target, argumentsList, newTarget) {
return {};
}
});
new p(); // TypeError is thrown, "p" is not a constructor规范
规范 | 状态 | 意见 |
|---|---|---|
ECMAScript 2015(第6版,ECMA-262)该规范中'[[Construct]]'的定义。 | 标准 | 初始定义。 |
ECMAScript最新草案(ECMA-262)该规范中'[[Construct]]'的定义。 | 草案 |
浏览器兼容性
Desktop | Mobile | 服务器 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | Android webview | Chrome for Android | Edge Mobile | Firefox for Android | Opera for Android | iOS Safari | Samsung Internet | Node.js | |
基本支持 | 49 | 12 | 18 | 不支持 | 36 | 10 | 49 | 49 | Yes | 18 | 36 | 10 | 5.0 | Yes |
另请参阅
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com

