Skip to content

Instantly share code, notes, and snippets.

@thr0wn
Forked from DavidBruant/membrane.js
Last active July 13, 2017 16:41
Show Gist options
  • Save thr0wn/0d796e7be0f280f302dfa073d41a45aa to your computer and use it in GitHub Desktop.
Save thr0wn/0d796e7be0f280f302dfa073d41a45aa to your computer and use it in GitHub Desktop.
function makeMembrane(){
var revokableWrappingHandler = Proxy.revocable({}, {
get: function(target, name){
return (...args) => wrap(Reflect[name](...args));
}
});
var revoke = revokableWrappingHandler.revoke;
var wrappingHandler = revokableWrappingHandler.proxy;
var un2wrapped = new WeakMap();
var wrap = function wrap(x){
if(Object(x) !== x)
return x;
var wrapped = un2wrapped.get(x);
if(wrapped)
return wrapped;
wrapped = new Proxy(x, wrappingHandler);
un2wrapped.set(x, wrapped);
return wrapped;
};
return {
revoke: revoke,
wrap: wrap
};
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment