SOURCE

//代理demo
/*var obj = new Proxy({}, {
    get: function (target, key, receiver) {
        console.log(`getting ${key}!`);
        return Reflect.get(target, key, receiver);
    },
    set: function (target, key, value, receiver) {
        console.log(`setting ${key}!`);
        return Reflect.set(target, key, value, receiver);
    }
});
obj.count=1;
++obj.count;
console.log(obj.coount);*/

//设置拦截
/*var handler = {
    get: function (target, name) {
        if (name === 'prototype') {
            return Object.prototype;
        }
        return `Hello, ${name}`;
    },
    apply: function (target, thisBinding, args) {
        return args[0];
    },
    construct: function (target, args) {
        return { value: args[1] };
    }
};
var fproxy = new Proxy(function (x, y) {
    return x + y;
}, handler);
console.log(fproxy(1, 2));   //1
console.log(new fproxy(1, 2));   //{value:2}
console.log(fproxy.prototype === Object.prototype); //true
console.log(fproxy.foo === 'Hello, foo'); //true*/

//get拦截,实现数组读取负数的索引。
function createArray(...elements) {
    let handler = {
        get(target, propKey, receiver) {
            let index = Number(propKey);
            if (index < 0) {
                propKey = String(target.length + index);
            }
            return Reflect.get(target, propKey, receiver);
        }
    };

    let target=[];
    target.push(...elements);
    return new Proxy(target,handler);
}

console 命令行工具 X clear

                    
>
console