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