如何用文字表示法来代理数组的实例化 []

问题描述

我可以检测到通过 Array() 或 new Array() 创建的新实例。但是 [] 呢?

const originalArray = Array;
Array = new Proxy(Array,{
    construct(target,args) {
        console.log('new array');
        const newArray = Reflect.construct(originalArray,args);
        return newArray;
    },apply(target,thisArg,argArray){
        console.log('apply');
        Reflect.apply(target,argArray);
    }
});

var a = [3,2];// no handler
var b = Array(3,2);// apply
var c = new Array(3,2);// new

解决方法

无法从文字语法中拦截对象创建。

事实上,这可能是由于一个错误导致的,该错误导致 JSON vulnerable to hijacking 导致信息泄漏。