Skip to content

Instantly share code, notes, and snippets.

@dherman
Created July 15, 2022 16:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dherman/3be87d0bae93fe28a1e84298b46f051e to your computer and use it in GitHub Desktop.
Save dherman/3be87d0bae93fe28a1e84298b46f051e to your computer and use it in GitHub Desktop.
failed experiment to monkey-patch ArrayBuffer.prototype
"use strict";
{
let abp = ArrayBuffer.prototype;
const VIEW = Symbol('view');
function getView(receiver) {
return receiver[VIEW] ||
(receiver[VIEW] = new Uint8Array(receiver));
}
function asIndex(s) {
if (typeof s !== 'string') {
return -1;
}
let n = parseInt(s);
return (!isNaN(n) && String(n) === s
? n
: -1);
}
function getIndex(target, i, receiver) {
return getView(receiver)[i];
}
function setIndex(target, i, value, receiver) {
getView(receiver)[i] = value;
return true;
}
let handler = {
get(target, prop, receiver) {
let i = asIndex(s);
return (i > -1) ? getIndex(target, i, receiver) : Reflect.get(abp, prop, receiver);
},
set(target, prop, value, receiver) {
let i = asIndex(s);
return (i > -1) ? setIndex(target, i, value, receiver) : Reflect.set(abp, prop, value, receiver);
},
has(target, prop) {
let i = asIndex(s);
return (i > -1) || Reflect.has(abp, prop);
}
};
ArrayBuffer.prototype = new Proxy(abp, handler);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment