Loading...
a.angelov avatar a.angelov 1316 Точки

[Homework] Advanced JS - Functions and function expressions - Problem{4} Adding Numbers Using Functions

Някой реши ли тази задача... Нещо не мога да схвана условието и по-конкретно подаването на входа:

add(1)(0)(-1)(-1)

Какво се има в предвид, че последователно ще бъде извикано add(1), add(0), add(-1) и add(-1) ли?

Тагове:
3
JavaScript Advanced 04/03/2015 12:58:07
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Аз намерих ето това: 

function add(n) {
    var v = function (x) {
        return add(n + x);
    };

    v.valueOf = v.toString = function () {
        return n;
    };

    return v;
}

var addTwo = +add(2);
console.log(addTwo); //2

var addTwo = add(2);
console.log(+addTwo(3)(5)(1)(7)); //18
6
04/03/2015 18:12:41
Pavel_R avatar Pavel_R 57 Точки

Да, този пример работи по-коректно от този който по-горе съм дал. Бравос :)

0
mihayloff14 avatar mihayloff14 824 Точки

В случая valueOf би трябвало да override-ва един вид "setter"-а на тази фунция поради липсата на по-добро обяснение. Един вид по този начин може да се използва add(2) + add(3) или примерно add(3)++?

0
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Това е обяснението на автора на решението:

The + casts the result of sum() to number. In that case JavaScript calls the .valueOf method of an object. Since I'm returning anonymous function, this helps to convert it to primitive type. As you can see, I overwrote the native .valueOf with my own.

3
StanimirZ avatar StanimirZ 4 Точки

Интересно е и това :

 

function add(n) {
    sum = n;
    let proxy = new Proxy(function a () {}, {
        get (obj, key) {
            return () => sum+='';
        },
        apply (receiver, ...args) {
            sum += args[1][0];

            return proxy;
        },
    });
    return proxy
}

 

Ето линк:

https://stackoverflow.com/questions/2272902/how-can-i-make-var-a-add23-5-work

Между другото видеото на Божидар Гевечанов от юни 2017 много добре обяснява нещата. Задачата е от 23 минута на видеото.

https://www.youtube.com/watch?time_continue=1438&v=yqTCExj5UMU

 

0
17/11/2018 16:31:47
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.