[Javascript] Access private variable inside IIFE and mutate this through Object.prototype getter function
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步