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 定义的局部变量,将无法被模块外部访问。但可以导出整个模块,也可以导出单个对象或方法。只有导出后,才可以使用其导出的对象或方法。