Clever (took me a moment to figure out what the comma operator does here...). And makes sense: You would not want an invoker to have that kind of power.
If it wasn’t so negative for performance, I probably would apply curryThis() to all of my methods: var obj = { method: function (self, arg) { // additional argument `self` someFunction(..., function() { self.otherMethod(arg); }); }.curryThis(), // introduce an additional argument otherMethod: function (arg) { ... } } Function.prototype.curryThis = function () { var f = this; return function () { var a = Array.prototype.slice.call(arguments); a.unshift(this); return f.apply(null, a); }; }; On Nov 10, 2011, at 1:15 , Mark S. Miller wrote: > 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 -- Dr. Axel Rauschmayer a...@rauschma.de home: rauschma.de twitter: twitter.com/rauschma blog: 2ality.com
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss