require导出一个组件之后,怎么使用不了

其实你这样的意图本身是没问题的,官方文档也没说错,通过“require”引入模块去直接调用里面相应的方法等。


但你的编码有问题,实际是你没弄明白实例对象的方法和类静态方法的区分,这里和下面都是按Creator里的模拟传统OOP语言里类相关概念去理解和叙述。你暂且先如此强行理解吧:你上文那样的编码就是相当于定义了一个playerInfos类,你里面的func函数那样编码就相当于传统OOP的实例方法,而require(‘playerInfos’)只是引入了这个类,你自然需要new一个类的实例对象才能调用其实例方法,比如:

 //命名故意区分
const PlayInfosClass = require('playerInfos')
let playerInfoObj = new PlayInfosClass()
palyerInfosObj.func()
//......

如果你想:

const PlayInfosClass = require('playerInfos')
PlayInfosClass.func()
//......

显然需要func函数为类静态方法,比如按官方文档里教的去定义:

let playerInfos = cc.Class({
     extends: cc.Component,
    // 声明静态方法
     statics: {        
        func: function () {}
        }
    //...
})

当然官方文档里还有其他方式,只是个人觉得这种更具语义化。
CCClass 进阶参考


也许是:

var playerInfos=cc.Class({...})

这样把人弄迷糊了……JavaScript利用构造函数+原型的方式去模拟传统OOP的类与继承的确容易把新接触JavaScript的同学弄迷糊,两边不同的概念相互映射起来,不小心就弄糊涂了。像我这样的JavaScript小白觉得JavaScript是入门平缓,但想深入进去还是有一些陡峭处的。水平有限,不当之处还请指正,与君共勉。

3赞

好的,非常感谢你的回复。

谢谢,解决了我的问题

按照大佬给出的方法, 在被调用的脚本里面声明statics 静态方法,然后再定义被调用的方法,但是问题来了,此时定义的被调用方法里面,不能得到 this.node,或者说this的指向已经改变,怎么解?请教大神

你调用static里的静态方法是针对这个脚本组件类而言的,而不是这个组件类对应的一个实例,既然没有生成组件实例,当然也就没有实例所依附(挂载)的节点(Node)了,所以使用this.node当然是拿不到对应的节点的

你想要通过this.node的方式去获取一个节点,那么你的"this"必须得是一个脚本的实例才行。通常这种实例是由Creator自动创建的(挂载了这个脚本的节点被添加到场景上时会自动创建),这时候就可以通过this.node访问到节点。
如果你的组件实例不是由creator自动创建的,而是你通过代码手动创建的(比如使用new关键字),那么你需要在创建以后将这个组件实例挂载到节点上(node.addComponent),之后才能通过组件获取到节点

1赞

跟我的疑惑自摸一样,试了好多次,以前放到静态变量里然后赋值this可以用,现在干脆怎么都不可以用了,构造函数没试。感觉官方文档是假的!

require 有什么用?