<div>
                    <span style="font-size: 14px;">One more thing if some reason one want's to call arrow method without passing an owner it's still easy:</span>
                </div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">(List.prototype.map)([ 1, 2, 3 ], (x) => x + 1)</span></div>
                <div><div><br></div><br clear="all">Regards<br><span style="color:rgb(153, 153, 153)">--</span><br style="color:rgb(153, 153, 153)"><span style="color:rgb(153, 153, 153)">Irakli Gozalishvili</span><br style="color:rgb(153, 153, 153)"><span style="color:rgb(153, 153, 153)">Web: <a style="color:rgb(153, 153, 153)" href="http://www.jeditoolkit.com/" target="_blank">http://www.jeditoolkit.com/</a></span><font color="#999999"><br></font><div><br></div></div>
                 
                <p style="color: #A0A0A8;">On Tuesday, 2012-07-10 at 15:02 , Irakli Gozalishvili wrote:</p>
                <blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;">
                    <span><div><div>
                <div><span style="font-size: 14px;">Hi,</span>
                </div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">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</span></div><div><span style="font-size: 14px;">used as methods. For example it was great that in JS one could write a function that could be used as</span></div><div><span style="font-size: 14px;">a method or as function:</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">function map(f) {</span></div><div><span style="font-size: 14px;">  return this.reduce((result, value) => </span><span style="font-size: 14px; "> result.concat([ f(value) ]), [])</span></div><div><span style="font-size: 14px;">}</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">// Use as method</span></div><div><span style="font-size: 14px;">foo.map = map;</span></div><div><span style="font-size: 14px;">foo.map((x) => x + 1)</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">// Use as function</span></div><div><span style="font-size: 14px;">map.call(bar, (x) => x + 1)</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">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.</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">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:</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">foo.map((x) => x + 1) </span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">be a sugar for</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">map(foo, (x) => x + 1)</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">If `map` is an arrow function</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">That would make (arrow) functions a lot more composable:</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">var map = (list, f) =></span></div><div><span style="font-size: 14px;">   list.reduce((result, value) => result.concat([ f(value) ]), [])</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">List.prototype.map = map</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">List().map((x) => x + 1)</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">or </span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">map(List(), (x) => x + 1)</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">or</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">map([ 1, 2, 3 ], (x) => x + 1)</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">I think this would make a good synergy of OO and functional styles in JS</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;"><br></span></div><div>Regards<br><span style="color:rgb(153, 153, 153)">--</span><br style="color:rgb(153, 153, 153)"><span style="color:rgb(153, 153, 153)">Irakli Gozalishvili</span><br style="color:rgb(153, 153, 153)"><span style="color:rgb(153, 153, 153)">Web: <a style="color:rgb(153, 153, 153)" href="http://www.jeditoolkit.com/" target="_blank">http://www.jeditoolkit.com/</a></span><font color="#999999"><br></font><div><br></div></div>
            </div></div></span>
                 
                 
                 
                 
                </blockquote>
                 
                <div>
                    <br>
                </div>