• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • handler.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操作符。

    拦截

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

    • new proxy(...args)
    • Reflect.construct()

    约束

    如果违反以下约定,代理将会抛出错误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