Skip to content

Instantly share code, notes, and snippets.

@greenlikeorange
Last active March 6, 2020 11:46
Show Gist options
  • Save greenlikeorange/9ed6d541617ddd9f5a4891ef885f5709 to your computer and use it in GitHub Desktop.
Save greenlikeorange/9ed6d541617ddd9f5a4891ef885f5709 to your computer and use it in GitHub Desktop.
Lazy Clone using Proxy
Just created! Very limitted usage.
TODO:
- `enumerate`
- `ownKeys`
- `has`
function isObject(obj) {
var type = typeof obj;
return type === 'object' && !!obj;
}
function lazyClone(source) {
function seltBelt(source) {
var clone = {};
return new Proxy(source, {
get: function (target, prop) {
if (prop === '__isProxy') return true;
if (clone[prop]) return clone[prop];
var accessedProperty = target[prop];
if (isObject(accessedProperty) && !accessedProperty.__isProxy) {
return seltBelt(accessedProperty);
} else {
return accessedProperty
}
},
set: function (target, prop, value) {
return clone[prop] = value;
},
});
}
return seltBelt(source);
}
// Usage
var FOC = {f:1,o:1,c:1};
var abitComplexObject = [{x: [1,2],y: FOC}, false, [1,2, {n: 1}]]
var CLONE = lazyClone(abitComplexObject);
CLONE[0].y.f = 20
console.log(FOC.f !== CLONE[0].y.f) // true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment