[Javascript] Access private variable inside IIFE and mutate this through Object.prototype getter function

Zhentiw發表於2024-08-23

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;
  },
});

[Javascript] Access private variable inside IIFE and mutate this through Object.prototype getter function

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

[Javascript] Access private variable inside IIFE and mutate this through Object.prototype getter function

Now we are able to mutate the obj

[Javascript] Access private variable inside IIFE and mutate this through Object.prototype getter function

相關文章