For this code, try to not modify the code itself but mutate obj
var o = (function () {
var obj = {
a: 1,
b: 2,
};
return {
get: function (k) {
return obj[k];
},
};
})();
Answer:
Our target is when we calling o.get()
, we want to get the reference of obj
, once we got the reference then we can mutate the value whatever we want.
Since we know that Object
has prototype chain, for example, we can do following:
Object.defineProperty(Object.prototype, "abc", {
get() {
return this;
},
});
now if we invoke o.get("abc")
, then it will invoke the prototype Object.prototype.abc
which is a get function and return the caller this
Now we are able to mutate the obj