- A+
所属分类:Web前端
Cocos Creator 中的 JavaScript 使用和 Node.js 几乎相同的 CommonJS 标准来实现模块化,
简单来说:
- cocos 中 cc.Class 定义的每一个单独的 JavaScript 脚本文件就构成一个模块。
- cocos 中普通 JavaScript 脚本文件需要添加 module.exports 主动导出成模块。
模块化的特性:
- 每个模块都是一个单独的作用域,互不干扰。
- 当前模块如果想使用其它模块代码需要以 require 方法来引用。
如下是针对2种不同情况下,模块化的示例代码:
1. 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几次,返回的始终是同一份实例。
2. 普通 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 定义的局部变量,将无法被模块外部访问。但可以导出整个模块,也可以导出单个对象或方法。只有导出后,才可以使用其导出的对象或方法。