My proposal could break existing code so it’s probably not worth a shot in ES6.
Maybe in ES7, then.
From: Brendan Eich
Sent: Friday, January 06, 2012 12:52 AM
To: François REMY
Cc: Axel Rauschmayer ; Andrea Giammarchi ; es-discuss
Subject: Re: Improving Function.prototype.bind
What *exactly* would you do here? Making methods auto-bind on extraction, with
memoization? Please be concrete and specific.
It would be to do the same thing as the old IE behavior with host functions.
var $ = document.getElementById;
$(‘id’) // works as expected, on document
$.call(anotherDocument, ‘id’); // works as expected, on anotherDocument
setImmediate(myObj.asyncAction); // works as expected
That means that a function reference returned by obj.func would have a
“default” this to be used when there’s no this available.
Implementation may use an internal [[boundFunctions]] property to make sure to
return the same “boundFunction” instance each time when accessed on an object.
Or another trick could be used as operator overloading to make it feel like
that while it’s not true (but it would need to update native functions like
addEventListener as well, which is not easy/efficient).
Please note that the current behavior of using a “Reference” doesn’t need to be
updated, it’s just that when the reference is flattened to a “Function” it
should be flattened in a “Default-Bound Function” instead. For most of the code
I see on the web, it would not make any difference.
This would not change the behavior of the bind function which makes a function
whose “this” is ALWAYS the boundObject (consider
document.querySelector.bind(document).call(document.body.firstChild, "body"))
François
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss