Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 02.04.2021, 14:32
Интересующийся
Отправить личное сообщение для worldsering Посмотреть профиль Найти все сообщения от worldsering
 
Регистрация: 01.04.2021
Сообщений: 11

Сообщение от Alexandroppolus Посмотреть сообщение
worldsering,
function number(num) {
    const inner = function(n) {
        const numberN = function(n1) {
            return inner(n * n1);
        }
        numberN.valueOf = function() { return n; };
        numberN.toString = function() { return String(n); };
        return numberN;
    }
    return inner(num);
}

const number5 = number(5);
const number10 = number5(2);
const number30 = number10(3);

const number15 = number5(3); // другая ветка умножения

alert([number5, number10, number30, number15, number10 + number15].join('\n'));
__________________________________________________ ______
Спасибо но в итоге,
const number5 = number(5);
const number10 = number5(2);
console.log(number10(3)) // Выведет функцию, а не 30
console.log(number10(3).valueOf()) // Выведет 30

Можно ли как то это сделать без дополнительного метода valueOf.

Последний раз редактировалось worldsering, 02.04.2021 в 14:43.
Ответить с цитированием
  #12 (permalink)  
Старый 02.04.2021, 14:39
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Сообщение от worldsering
console.log(number10(3)) // Выведет функцию, а не 30
тут уж ничего сделать не получится.
если у тебя функция, то чем её не обвешивай, а всё равно она останется функцией, а не числом.
и console.log напишет о ней всю правду.

вероятно, эту проблему можно решить через Proxy, пока точно сказать не могу..
Ответить с цитированием
  #13 (permalink)  
Старый 02.04.2021, 14:47
Интересующийся
Отправить личное сообщение для worldsering Посмотреть профиль Найти все сообщения от worldsering
 
Регистрация: 01.04.2021
Сообщений: 11

Сообщение от Alexandroppolus Посмотреть сообщение
тут уж ничего сделать не получится.
если у тебя функция, то чем её не обвешивай, а всё равно она останется функцией, а не числом.
и console.log напишет о ней всю правду.

вероятно, эту проблему можно решить через Proxy, пока точно сказать не могу..

Все равно спасибо большое ! очень помог!
Ответить с цитированием
  #14 (permalink)  
Старый 02.04.2021, 14:50
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Alexandroppolus,
вроде одна из вложенных функций лишняя
function number(num) {
    const numberN = function(n1) {
        return number(num * n1);
    }
    numberN.valueOf = function() {
        return num;
    };
    numberN.toString = function() {
        return String(num);
    };
    return numberN;
}

const number5 = number(5);
const number10 = number5(2);
const number30 = number10(3);

const number15 = number5(3); // другая ветка умножения

alert([number5, number10, number30, number15, number10 + number15].join('\n'));
Ответить с цитированием
  #15 (permalink)  
Старый 02.04.2021, 14:54
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

destus,
Точно, с иннером я упоролся. Это фиаско.
Ответить с цитированием
  #16 (permalink)  
Старый 02.04.2021, 18:53
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,589

Можно ещё then метод добавить, чтоб делать
const num = await number(1)(2)(3);

И toJSON чтоб в JSON.stringify работало.
__________________
29375, 35

Последний раз редактировалось Aetae, 02.04.2021 в 18:55.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск