> You don't mean for-of, you mean for (let i...) in any form. We want all
> for-let forms to make fresh let bindings per iteration. That's what your
> resolution for (7) should say, and ES6 does indeed aim to do this.
Yes, thanks. I thought only for-of did this.
>>> We can work around it by changing the constructor:
>>> function A() {
>>> this.a = 123;
>>> this.p = this.p.bind(this);
>>> }
>>>
>>> but of course now we are over-allocating for no good reason IMO. Very
>>> frustrating.
>>
>> Yes, that’s (9c). I would love for JS to make the distinction between
>> reading a property and invoking a function.
>
> If you "fix" this by making extraction of a function value from a property
> auto-bind, which will have the same overhead under the hood that Wes cites in
> his explicit bind-based version.
>
> If you let the function be extracted with unbound |this|, then you'll have
> bugs where it is called on the wrong |this| (undefined, let's hope).
>
> You can't have it both ways. In particular, auto-bind on extract costs (even
> moreso if there's a memo under the hood to reuse the same single bound method
> -- which is mutable so would make a side channel).
>
> JS is functional first, not OOP first. APIs that want methods to be
> extractable as bound to the object from which they were extracted must do
> extra work, which can be self-hosted via getters for specific methods, or a
> general proxy.
Again, not sure if that’s feasible, but it would help if one could make the
distinction between a property being read (“get”) and a method being invoked
(“call”).
{
function extractableMethod(...) { ... }
Object.defineProperty(Foo.prototype, 'extractableMethod', {
get() {
return extractableMethod.bind(Foo.prototype);
},
call(...args) {
return extractableMethod.call(Foo.prototype, ...args);
}
});
}
Still messy and probably not backwards compatible, so a bind operator might be
a better idea, after all:
elem.onclick = obj::foo; // or the proposed ::obj.foo
instead of
elem.onclick = obj.foo.bind(obj);
--
Dr. Axel Rauschmayer
[email protected]
home: rauschma.de
twitter: twitter.com/rauschma
blog: 2ality.com
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss