[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 Objecthas 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.abcwhich is a get function and return the caller this

Now we are able to mutate the obj

posted @ 2024-08-23 03:47  Zhentiw  阅读(9)  评论(0编辑  收藏  举报