Запишу сюда, вдруг понадобится. Один раз уже пригодилось. Работающий пример javascript прокси.

function handlerMaker(obj) 
{
    return {

        getOwnPropertyDescriptor: function(name) 
        {
          console.log("getOwnPropertyDescriptor",name)
          var desc = Object.getOwnPropertyDescriptor(obj, name);
          // a trapping proxy's properties must always be configurable
          if (desc !== undefined) { desc.configurable = true; }
          return desc;
        },

        getPropertyDescriptor:  function(name) 
        {
            console.log("getPropertyDescriptor",name)
            var desc = Object.getPropertyDescriptor(obj, name); // not in ES5
            // a trapping proxy's properties must always be configurable
            if (desc !== undefined) { desc.configurable = true; }
            return desc;
        },

        getOwnPropertyNames: function()
        {
            console.log("getOwnPropertyNames")
            return Object.getOwnPropertyNames(obj);
        },

        getPropertyNames: function()
        {
            console.log("getPropertyNames")
            return Object.getPropertyNames(obj);                // not in ES5
        },

        defineProperty: function(name, desc) 
        {
            console.log("defineProperty", name, desc)
            Object.defineProperty(obj, name, desc);
        },

        delete: function(name) 
        {
            console.log("delete", name)
            return delete obj[name];
        },   

        fix: function() 
        {
            console.log("fix")
            if (Object.isFrozen(obj)) 
            {
                var result = {};
                Object.getOwnPropertyNames(obj).forEach(function(name) 
                {
                    result[name] = Object.getOwnPropertyDescriptor(obj, name);
                });
                return result;
            }
            // As long as obj is not frozen, the proxy won't allow itself to be fixed
            return undefined; // will cause a TypeError to be thrown
        },

        has: function(name) 
        { 
            console.log("has",name)
            return name in obj;
        },

        hasOwn: function(name) 
        { 
            console.log("hasOwn",name)
            return ({}).hasOwnProperty.call(obj, name); 
        },

        get: function(receiver, name) 
        { 
            console.log("get", receiver, name)
            return obj[name]; 
        },

        set: function(receiver, name, val) 
        { 
            console.log("set", receiver, name, val)
            obj[name] = val; 
            return true; 
        }, // bad behavior when set fails in non-strict mode

        enumerate: function() 
        {
            console.log("enumerate")
            var result = [];
            for (var name in obj) { result.push(name); };
            return result;
        },

        keys: function() 
        { 
            console.log("enumerate")
            return Object.keys(obj); 
        }

    }
}

var proxy = Proxy.create(handlerMaker({key:"asdf"}));

return proxy
[ ]
 

P.S. Присылайте криптовалюту если вам нравится то, что я делаю.
Если не нравится - тоже присылайте.
LTC (Litecoin): LLN6X2uV1iuQ1e4tdmQZsf2RRwh4pxPSej

Leave a Reply

*