JSFiddle - React, Tailwind, and code Playground

by infralabs

JavaScript

console.clear();

var AAA = function (methods) {

    // argumenty przekazywane do 'AAA'
    console.log("1.");
    console.log("AAA arguments: ", arguments);
    console.log("---");
    
    var bbb = function () {
        
        console.log("2.");
        console.log("bbb this.initialize: ", this.initialize);
        
        // zmienna 'name' zanim zostanie wywołana funkcja bbb.initialize
        console.log("this.name/bbb.name: ", this.name);
        console.log("bbb this: ", this);
        
        // argumenty przekazywane do 'bbb'
        console.log("bbb arguments: ", arguments);
        
        console.log("---");
        console.log("this.initialize.apply(this, arguments);");
        console.log("---");
        this.initialize.apply(this, arguments);
        
        // zmienna 'name' po wywołaniu funkcja bbb.initialize
        console.log("this.name/bbb.name: ", this.name);
        
        console.log("bbb this: ", this);
        console.log("bbb arguments: ", arguments);
        
    };
    
    console.log("3.");
    // przed napisaniem bbb.initialize
    console.log("bbb this.initialize: ", bbb.initialize);
    
    for (var property in methods) {
        bbb.prototype[property] = methods[property];
    }
    
    console.log("4.");
    // po napisaniu bbb.initialize
    console.log("bbb this.initialize: ", bbb.initialize);
    
    if (!bbb.prototype.initialize) bbb.prototype.initialize = function () {};
    
    console.log("5.");
    console.log("return bbb;");
    return bbb;
    
};

var Person = AAA({
    initialize: function (name, age) {
        this.name = name;
        this.age = age;
    },
});

var alice = new Person('Alice', 26);
// 'Alice', 26 - argumenty przekazywane de facto do 'bbb'