One more thing if some reason one want's to call arrow method without passing an owner it's still easy:
(List.prototype.map)([ 1, 2, 3 ], (x) => x + 1) Regards -- Irakli Gozalishvili Web: http://www.jeditoolkit.com/ On Tuesday, 2012-07-10 at 15:02 , Irakli Gozalishvili wrote: > Hi, > > I just wanted to bring up IMO important limitation of arrow functions. They > do solve unbound `this` issues when used as a callback, but they also > introduce unfortunate limitation. Arrow functions can not really be > used as methods. For example it was great that in JS one could write a > function that could be used as > a method or as function: > > function map(f) { > return this.reduce((result, value) => result.concat([ f(value) ]), []) > } > > // Use as method > foo.map = map; > foo.map((x) => x + 1) > > // Use as function > map.call(bar, (x) => x + 1) > > I would say still is unfortunate that such reusable functions had do be > called via special `.call` but never the less code sharing was simple to do. > > Now arrow functions as they stand today can not be used in that manner as > `this` refers to the outer scope `this` for a good reason. But it still would > be nice to allow reusing them as methods, in fact they could be even solve > current `map.call(…)`. What I'd like to propose is borrow successful idea > from other languages and make: > > foo.map((x) => x + 1) > > be a sugar for > > map(foo, (x) => x + 1) > > If `map` is an arrow function > > That would make (arrow) functions a lot more composable: > > var map = (list, f) => > list.reduce((result, value) => result.concat([ f(value) ]), []) > > List.prototype.map = map > > List().map((x) => x + 1) > > or > > map(List(), (x) => x + 1) > > or > > map([ 1, 2, 3 ], (x) => x + 1) > > > I think this would make a good synergy of OO and functional styles in JS > > > Regards > -- > Irakli Gozalishvili > Web: http://www.jeditoolkit.com/ >
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss