On 10/4/19 2:39 PM, #!/JoePea wrote:
but the global `this` you captured still has the same identity as the new 
reference.

Interesting, I never knew that. Do you have a code sample to show how
to detect or prove that?

Sure. The following code logs "true, 5, 5, 5, 5, true, undefined, undefined, undefined, 5" in Firefox, Chrome, and Safari, which shows both the identity staying the same and the property disappearing from the WindowProxy, as well as showing the difference between the WindowProxy and the Window (the bareword lookup finds the var on the global, which is the Window, while `self.something` goes through the WindowProxy, which now points to the new `Window`):

<!DOCTYPE html>
<body>
  <script>
    var state = "first-load";
    var cachedThis;
    var cachedValueGetter;
    var cachedBarewordGetter;
    function loadHappened(iframe) {
      var win = iframe.contentWindow;

      if (state == "first-load") {
        cachedThis = win.getGlobalThis();
        cachedValueGetter = win.getPropertyValue;
        cachedBarewordGetter = win.getBareword;
        console.log(win == cachedThis);
        console.log(win.something);
        console.log(cachedThis.something);
        console.log(cachedValueGetter());
        console.log(cachedBarewordGetter());
        state = "second-load";
        iframe.srcdoc = iframe.srcdoc.replace("var something = 5;", "");
        return;
      }

      console.log(frames[0] == cachedThis);
      console.log(frames[0].something);
      console.log(cachedThis.something);
      console.log(cachedValueGetter());
      console.log(cachedBarewordGetter());
    }
  </script>
  <iframe srcdoc="
     <script>
       var self = this;
       var something = 5;
       function getGlobalThis() {
         return self;
       }
       function getPropertyValue() {
         return self.something;
       }
       function getBareword() {
         return something;
       }
     </script>"
     onload="loadHappened(this)"></iframe>
</body>

-Boris
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to