这篇翻译不完整。请帮忙从英语翻译这篇文章

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 .

拦截

该拦截器可以拦截以下操作:

约束

如果违反以下约定,代理将会抛出错误 TypeError:

  • 必须返回一个对象.

示例

下面代码显示了如何拦截 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

下面的代码未能正确的初始化Proxy. Proxy初始化时的target 其自身必须试一个合法的constructor.

var p = new Proxy({}, {
  construct: function(target, argumentsList, newTarget) {
    return {};
  }
});

new p(); // TypeError is thrown, "p" is not a constructor

规范

Specification Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
[[Construct]]
Standard Initial definition.
ECMAScript Latest Draft (ECMA-262)
[[Construct]]
Draft  

浏览器兼容性

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support ? 18 (18) ? ? ?
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support ? ? 18.0 (18) ? ? ?

另见

文档标签和贡献者

 此页面的贡献者: DuLinRain
 最后编辑者: DuLinRain,