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?