На одном, все нам хорошо известном ресурсе, опубликовали статью содержащую следующий фрагмент кода. Данная функция написана отнюдь не новичком, и смысл ее в том, что бы можно было сложить неограниченное количество чисел, при условии, что аргументы передаются по одному (add(5)(14)(3) и т.д.). И все бы ничего если бы не одно но -- в данном примере возвращаемым значением является функция inner. После того как функция обрабатывает последний аргумент она просто возвращает функцию. "И что же здесь интересного ?" -- спросите вы, а то что здесь функция inner.valueOf переопределена и возвращает sum в качестве результата. Данный код работает в Chrome, а вот Mozill`e данная фича не прокатывает. Как я понимаю, автор воспользовался природой valueOf, которая позволяет вызывать сей метод, когда объект следует представить как примитив. Я с этой функцией еще не работал и меня интересует мнение "старших" -- правильно ли я понял смысл valueOf? Меня так же интересует вопрос о том почему Mozilla не вызывает valueOf при возврате объекта, а возвращает сам объект и как данную сложность можно обойти.
var add = function (a) {
var sum = a;
var inner = function (b) {
sum += b;
return inner;
};
inner.valueOf = function () { //объект дискуссии
return sum;
};
return inner;
};