JSFiddle - React, Tailwind, and code Playground

by ifandelse

HTML

<script src="https://rawgithub.com/ifandelse/strategy.js/master/lib/strategy.js"></script>

JavaScript

var strategies = {
    strategy1: function (a, b, c) {
        var args = arguments;
        return {
            name: "strategy1",
            fn: function (next) {
                var x = Array.prototype.slice.call(arguments, 1);
                setTimeout(function() {
                    $("body").append("<div>Strategy 1</div>");
                    $("body").append("<div><pre>" + JSON.stringify(args, null, 2) + "</pre></div>");
                    $("body").append("<div><pre>" + JSON.stringify(x, null, 2) + "</pre></div><hr/>");
                    next.apply(this, x);
                },0);
            }
        }
    },

    strategy2: function (food) {
        var args = arguments;
        return {
            name: "strategy2",
            fn: function (next) {
                var a = Array.prototype.slice.call(arguments, 1);
                setTimeout(function() {
                    $("body").append("<div>Strategy 2</div>");
                    $("body").append("<div><pre>" + JSON.stringify(args, null, 2) + "</pre></div>");
                    $("body").append("<div><pre>" + JSON.stringify(a, null, 2) + "</pre></div>");
                    next.apply(this, a);
                }, 1200);
            }
        }
    },

    strategy3: function (obj) {
        var args = arguments;
        return{
            name: "strategy3",
            fn: function (next) {
                var a = Array.prototype.slice.call(arguments, 1);
                $("body").append("<div>Strategy 3</div>");
                $("body").append("<div><pre>" + JSON.stringify(args, null, 2) + "</pre></div>");
                $("body").append("<div><pre>" + JSON.stringify(a, null, 2) + "</pre></div>");
                next.apply(this, a);
            }
        }
    }
};

var sub = {
    
    foo: 'bar',

    callback: function () {
        $("body").append("<div>CALLBACK EXECUTED + " + JSON.stringify(arguments, null, 2) + "</div>");
    }
};

sub.callback = new Strategy({ owner: sub,...