阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      JS Proxy construct()

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

      语法

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

      参数

      下面的参数将会传递给construct方法,this绑定在handler上。

      target

      目标对象。

      argumentsList

      constructor的参数列表。

      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供new操作符调用。

      var p = new Proxy({}, {
        construct: function(target, argumentsList, newTarget) {
          return {};
        }
      });
      
      new p(); // TypeError is thrown, "p" is not a constructor
      
      

      规范

      SpecificationStatusComment
      ECMAScript 2015 (6th Edition, ECMA-262)[[Construct]]StandardInitial definition.
      ECMAScript Latest Draft (ECMA-262)[[Construct]]Draft 

      相关主题

      目录
      目录