首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Proxy.handler.construct

handler.construct()?方法用于拦截new操作. 为了使新的操作在生成的Proxy对象上有效,用于初始化代理的目标本身必须具有[[Construct]]内部方法(即new target必须是有效的)。

语法

代码语言:javascript
复制
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运算符。

代码语言:javascript
复制
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

以下代码违反了不变量。

代码语言:javascript
复制
var p = new Proxy(function() {}, {
  construct: function(target, argumentsList, newTarget) {
    return 1;
  }
});

new p(); // TypeError is thrown

以下代码不正确地初始化代理。将target在代理初始化本身必须是一个有效的构造函数new操作。

代码语言:javascript
复制
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

另请参阅

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com