Today I was playing with the Object.defineProperty
method and doing weird stuffs like making the 3rd index of an Array
to π₯alwaysπ₯ return 'Frank Stallone' (don't ask why)
console.log([1,2,3,4][3]); // Frank Stallone
anyways
I added debugger statement to set method of a descriptor:
Object.defineProperty(Array.prototype, 3, {
set() { debugger; }
});
after typing something to the console triggers debugger with 2 calls in the call stack:
Code snippet in the first call:
(function i(t) {
let e;
e = "string" === t ? new String("") : "number" === t ? new Number(0) : "bigint" === t ? Object(BigInt(0)) : "boolean" === t ? new Boolean(!1) : this;
const s = [];
try {
for (let i = e; i; i = Object.getPrototypeOf(i)) {
if (("array" === t || "typedarray" === t) && i === e && i.length > 9999)
continue;
const n = {
items: [],
title: void 0,
__proto__: null
};
try {
"object" == typeof i && Object.prototype.hasOwnProperty.call(i, "constructor") && i.constructor && i.constructor.name && (n.title = i.constructor.name)
} catch (t) {}
s[s.length] = n;
const o = Object.getOwnPropertyNames(i)
, r = Array.isArray(i);
for (let t = 0; t < o.length && n.items.length < 1e4; ++t)
r && /^[0-9]/.test(o[t]) || (n.items[n.items.length] = o[t])
}
} catch (t) {}
return s
}
)
Top comments (0)