Показать сообщение отдельно
  #1 (permalink)  
Старый 16.06.2014, 20:54
Аватар для Vyus
Новичок на форуме
Отправить личное сообщение для Vyus Посмотреть профиль Найти все сообщения от Vyus
 
Регистрация: 16.06.2014
Сообщений: 2

ValueOf. Все точки над И.
На одном, все нам хорошо известном ресурсе, опубликовали статью содержащую следующий фрагмент кода. Данная функция написана отнюдь не новичком, и смысл ее в том, что бы можно было сложить неограниченное количество чисел, при условии, что аргументы передаются по одному (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;
    };
Ответить с цитированием