JSFiddle - React, Tailwind, and code Playground

JavaScript

// Define pluginApi function used to construct specific pluginApi instances (one for each plugin)
var pluginApi = function(pluginName) {
    return new pluginApi.fn.init(pluginName);
};

// Define pluginApi.fn as an alias to pluginApi prototype
pluginApi.fn = pluginApi.prototype = {
    
    pluginName: null, // Need to check for null in GWT code
    
    // Constructor function
    init: function(pluginName) {
        this.pluginName = pluginName;
        return this;
    },
    
    // API function
    ready: function() {
        window.alert('yay! plugin ' + this.pluginName + ' is ready!');
    }
    
};

// Give the init function the pluginApi prototype for later instantiation
pluginApi.fn.init.prototype = pluginApi.fn;

// Expose pluginApi function as a global object
window.pluginApi = pluginApi;

// ACTUAL TEST CODE
pluginApi('foo').ready();