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几次,返回的始终是同一份实例。   
  1. 普通 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定义的局部变量,将无法被模块外部访问。但可以导出整个模块,也可以导出单个对象或方法。只有导出后,才可以使用其导出的对象或方法。