>> Or are there other plans to get it solved? I would still love to see that 
>> happen, it’s a remarkably subtle source of errors. Could functions adopt the 
>> block-lambda semantics of picking up the `this` of the surrounding scope 
>> when not invoked as methods? It seems like that could work in strict mode 
>> where no one expects `this` to have a value.
> 
> No, if you call such functions via object.method() references then this binds 
> to object. You can't break such compatibility only at runtime, and only some 
> of the time.

Got it. I’m assuming that’s a performance issue?

In principle, one can envision: Bind this lexically by default, override with 
receiver when called as a function.

var obj1 = {
    makeFunction: function() {
        return function () { return this; };
    }
}
var func = obj1. makeFunction();
console.log(func() === obj1); // true, lexical `this` by default

obj2 = {
    method: func
}
console.log(obj2.method() === obj2);  // true, dynamic this overrides lexical 
`this`


Sorry for bringing up this issue again, I’m still a bit hazy as to what the 
arguments against such a solution are, especially after having seen the 
semantics of block lambdas.

-- 
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

Reply via email to