关于官方文档《模块化脚本》一章的研究和提问

这篇《模块化脚本》我研究了两天,因为刚学,大佬莫见笑,在我的认知里确实不知道怎么办了:

1.原文链接:https://docs.cocos.com/creator/manual/zh/scripting/modular-script.html#封装私有变量

2.这章4个版块的内容:

3.疑问:
(1)“定义组件”的部分说


意思就是组件就不用module.exports就能被别人引用,组件的概念不是实现一个功能的一块代码吗,某个程度上也可以说脚本 = 模块 = 组件 ,那组件就不用导出范围也太广呢,而且,我照着写了一个data的组件,实现结果是报错不存在此组件。

(2)“ 定义普通 JavaScript 模块”的部分说要加module.exports导出,我在data组件后module.exports导出了,但是仍报错不存在此组件。

(3)“组件”的定义是什么呢?我看文中只写了个 var Rotate = cc.Class(){} 就是组件,为什么我照着写却报错?

4.我自己的研究:
我结合自己了解到的情况,将所有我认为可能合理的组合进行了实验,结果也违背了我既有的认知,我还是才疏学浅了,求指教:

(1)一般脚本都是在cc.class里写的,这我能理解,是将脚本作为类重复使用,那加个变量 var Rotate = cc.Class 这样是为了什么呢。
不加变量应该是以脚本名作为类名,加变量是为了以变量作为类名,且在一个脚本中创建多个这样的类吗?

(2)感谢你能看到这儿,见笑了。
我查到说要实例化,然后导出实例,但是这样也报错无此模块,为什么呢
image

(3)请问在这样的情况下,module.exports = A 的 A 应该是脚本名、data 还是实例化的dataItem呢?

我就根据我的理解回答一下吧
1、脚本 = 模块 = 组件 这个认识是不对的,脚本就是js文件, 模块是以指定的格式规范写的js文件,而creator中的组件是继承了cc.Component的类。 js本身其实也没有导出导入功能的, 这些功能都是我们写代码的时候使用的一些规范,比如使用全局变量一样可以互相引用。所以module.exports就是把js的内部变量暴露出去,但是creator也可以直接使用cc.Class直接注册到需要引用的地方,然后自己写一个require函数引用就可以了。
2、一样的问题认知混淆了。
3、can,t not find module data 其实就是名字写错了, 你应该使用js文件的名字

3赞

谢谢谢谢,非常感谢你费时间回答我的问题,我大概理清楚了。
也就是继承了cc.Component的类,可以不用module.exports,外部也可以require它拿来使用;

另一点,为什么在我写了data = cc.class(){…}的情况下,仍要要用js文件名来作为模块的名字呢。
我的理解是没有加data= 的情况下,文件名就是类名,但是加了data = ,类名应该变为data了,module.exports = data也应该没问题。
我的这个认知应该是错的,module.exports它等于号后面,到底应该是个什么东西呢?