получение строкового представления данных из функции js каррирование

У меня есть исправленная с вашей помощью функция для каррирования!

function curry(func) {
let args = [], isFlagToReset = false;
let selfRetFunc = function(...str) {
    if (isFlagToReset) {
        isFlagToReset = false;
        args = [];
    }
    args.push(str);
    return selfRetFunc;
}
let getResult = function(isOrdinaryCall = false) {
    if (isOrdinaryCall) return Function.prototype.toString.call(selfRetFunc);
    isFlagToReset = true;
    return func(args);
}
selfRetFunc.valueOf = getResult;
selfRetFunc.toString = getResult;
return selfRetFunc;
}

function concatSpec(strs) {
let separator = "", result = "";
for (let str of strs) {
    if (str[0] && typeof str[0] !== "string") return result;
    if (str[0]) result += str[0];
    if (str[1]) separator = str[1];
    result += separator;
}
return result;
}

let con = curry(concatSpec);

console.log(con("one"));
console.log(con("one")("two"));
console.log(con("one")("two")("three"));

Мой вопрос заключается в следующем. В интерпретаторе stackoverflow все работает правильно. Но при попытке загрузки данного кода в JSFiddle или использовании его локально на компе, вместо строки 'onetwothree', я получаю функцию.

https://jsfiddle.net/Natella/fvp1h29m/191/

в консоли сайта(та, которая представлена на сайте вместе с блоками для работы кода) все работает верно, но в браузерной(та, в которую заходим нажав F12)-нет.

хотела бы узнать, может кто-то может подсказать, как изменить данный код таким образом, что бы мне не приходилось писать вот такой костыль:

console.log(''+con("one")("two"));

Ответы (1 шт):

Автор решения: Grundy

Для случая, когда неизвестно в какой момент должно вернуться значение - ничего сделать нельзя.

Консоль браузера сама определяет как показать выводимый объект. В данном случае консоль хрома выводит сам переданный объект, а не результат вызова valueOf или toString.


Для решения можно либо добавить проверку, что функция вызывается без параметром = и в этом случае возвращать результат, а не функцию. Однако этот вариант ничем не отличается от приведения к строке.

Либо, переписать функцию curry таким образом, чтобы было явно задано количество ожидаемых параметров. Но в этом случае, невозможно будет получить значение в любой момент.

→ Ссылка