On Wed, Nov 9, 2011 at 4:00 PM, Brendan Eich <bren...@mozilla.com> wrote:

> On Nov 9, 2011, at 3:48 PM, Axel Rauschmayer wrote:
>
> We talked about lexical this for functions long ago (Jan. 2008? at Google
> anyway) and IIRC Mark found a subtler flaw.
>


I think my original example was smaller and more elegant. But the following
is adequate to demonstrate the problem:

  function Outer(secret) {
    "use strict";

    this.v = secret;
    this.w = secret * 2;
    this.x = secret * 3;

    this.InnerPoint = function(x, y) {
      this.x = x;
      this.y = y;
    };
    this.InnerPoint.prototype = {
      getX: function() { return this.x; },
      getY: function() { return this.y; }
    };
  }

Alice does:
  var outer = new Outer(mySecret);
  var innerPoint = new outer.InnerPoint(3,5);
  bob(innerPoint); // passed innerPoint to Bob, who Alice does not trust.

Today, Bob, receiving innerPoint, has no way to obtain Alice's secret.
Given your proposal, Bob could do

  (1,innerPoint.getX)() / 3;

Today, if Bob does that, the getX call fails when it tries to evaluate
undefined.x.

-- 
    Cheers,
    --MarkM
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to