Cocos Creator中的JavaScript使用和Node.js几乎相同的CommonJS标准来实现模块化,
简单来说:
- cocos中cc.Class定义的每一个单独的JavaScript脚本文件就构成一个模块。
- cocos中普通JavaScript脚本文件需要添加module.exports主动导出成模块。
模块化的特性:
- 每个模块都是一个单独的作用域,互不干扰。
- 当前模块如果想使用其它模块代码需要以require方法来引用。
如下是针对2种不同情况下,模块化的示例代码:
- cocos中cc.Class定义JavaScript模板文件。
例如test.js,格式如下:
// test.js
cc.Class({
extends: cc.Component,
properties: {
speed: 10,
},
update: function () {
}
});
现在要在别的脚本里访问它,可以在别的脚本里:
//先require引用该js模块,然后使用其定义的属性和方法。
var test = require("test");
cc.log("speed is", test.speed);
这样便能正确输出:"speed is 10"。
注意:
- require 可以在脚本的任何地方任意时刻进行调用。
- 游戏开始时会自动 require 所有脚本,这时每个模块内部定义的代码就会被执行一次,之后无论又被require几次,返回的始终是同一份实例。
- 普通 JavaScript 代码的模块化处理。
例如test.js,格式如下:
// test.js
var test = {
speed: 10,
load: function () {
// ...
}
};
module.exports = test
现在要在别的脚本里访问它,可以在别的脚本里:
//先require引用该js模块,然后使用其定义的属性和方法。
var test = require("test");
cc.log("speed is", test.speed);
这样便能正确输出:"speed is 10"。
注意:
- 当你的module.exports没有任何定义时,如果脚本里有定义了cc.Class,则自动把 exports 设为定义的 cc.Class,否则按照module.exports导出的对象为准。
- 每个脚本都是一个单独的作用域,在脚本内使用 var定义的局部变量,将无法被模块外部访问。但可以导出整个模块,也可以导出单个对象或方法。只有导出后,才可以使用其导出的对象或方法。