那位大神可以解释解释一下demo里面的这段代码的意思吗??

var StateJS;
(function (StateJS) {
    var Behavior = (function () {
        function Behavior(behavior) {
            this.actions = [];
            if (behavior) {
                this.push(behavior); // NOTE: this ensures a copy of the array is made
            }
        }
        Behavior.prototype.push = function (behavior) {
            Array.prototype.push.apply(this.actions, behavior instanceof Behavior ? behavior.actions : arguments);
            return this;
        };
        /**
         * Tests the Behavior instance to see if any actions have been defined.
         * @method hasActions
         * @returns {boolean} True if there are actions defined within this Behavior instance.
         */
        Behavior.prototype.hasActions = function () {
            return this.actions.length !== 0;
        };     
        Behavior.prototype.invoke = function (message, instance, history) {
            if (history === void 0) { history = false; }
            this.actions.forEach(function (action) { return action(message, instance, history); });
        };
        return Behavior;
    })();
    StateJS.Behavior = Behavior;
})(StateJS || (StateJS = {}));
// 声明一个变量
var StateJS;
// 使用 function 声明一个方法,并立即调用。这样的目的是创建一个私有作用域,里面的变量不会泄露到全局空间
(function (StateJS) {
    var Behavior = (function () {
        // 定义构造函数
        function Behavior(behavior) {
            this.actions = [];
            if (behavior) {
                this.push(behavior); // NOTE: this ensures a copy of the array is made
            }
        }
        // 定义成员方法
        Behavior.prototype.push = function (behavior) {
            Array.prototype.push.apply(this.actions, behavior instanceof Behavior ? behavior.actions : arguments);
            return this;
        };
        /**
         * Tests the Behavior instance to see if any actions have been defined.
         * @method hasActions
         * @returns {boolean} True if there are actions defined within this Behavior instance.
         */
        Behavior.prototype.hasActions = function () {
            return this.actions.length !== 0;
        };     
        Behavior.prototype.invoke = function (message, instance, history) {
            if (history === void 0) { history = false; }
            this.actions.forEach(function (action) { return action(message, instance, history); });
        };
        // 返回构造函数,于是上面的 var Behavior = 构造函数
        return Behavior;
    })();
    // 将构造函数定义到 StateJS
    StateJS.Behavior = Behavior;
// 如果之前已经有 StateJS,则使用之前的,否则将 StateJS 赋值为一个新对象{},并且传入
})(StateJS || (StateJS = {}));
3赞

谢谢。
希望你们能多给点demo,并且多制作点讲解视频,这样我们入门的难度就可以降低点。

我看到了下面还有PseudoState、Vertex等StateJS属性的定义,这是不是一种代码方式?
var StateJS; (function (StateJS) { var Behavior = (function () { function Behavior(behavior) { } return Behavior; })(); StateJS.Behavior = Behavior; })(StateJS || (StateJS = {}));
这个定义了类似于成员变量的Behavior?
var StateJS; (function (StateJS) { var Element = (function () { function Element(name, parent) { } return Element; })(); StateJS.Element = Element; })(StateJS || (StateJS = {}));
这里又定义了类似于成员变量的Element?