TS萌新请教怎么继承cc.Component写单例?
@property({
visible: false
})
static Instance : MSManager = null
onLoad () {
if (MSManager.Instance == null){
MSManager.Instance = this;
}
}
在使用的时候报错找不到 Instance 这个属性,还请各位大神指教
TS萌新请教怎么继承cc.Component写单例?
@property({
visible: false
})
static Instance : MSManager = null
onLoad () {
if (MSManager.Instance == null){
MSManager.Instance = this;
}
}
在使用的时候报错找不到 Instance 这个属性,还请各位大神指教
因为你把Instance声明为static了,那么它存在于这个类上,而不是类的实例上。也就是说你在其它地方getComponent(MSManager)得到的是一个MSManager的实例,上面是没有Instance的,应该用MSManager.Instance。
如果你只是要一个全局的管理类,应该也不需要继承cc.Component,直接:
// MSManager.ts
export class MSManager {
static Instance: MSManager = null;
test() {
cc.log(123);
}
}
MSManager.Instance = new MSManager();
// A.ts
import {MSManager} from "./MSManager";
MSManager.Instance.test();
ts 最正确的极简写法 不会暴漏类 new的情况
// HttpService.ts
export default class HttpService {
public static readonly instance = new HttpService();
private constructor() { }
public test() {
console.log("test");
}
}
// A.ts
import HttpService from './HttpService'
HttpService.instance.test();
感谢,但是我需要挂载组件上。
extend以后,constructor里需要写一个super的调用。
这么写也没办法正常使用instance ,说是只读属性。。。
不知道哪里还是有问题
我知道错哪里了,感谢。你的方法是没问题的
错在 import {MSManager} from “./MSManager”; 里了
这样import是因为类的写法是export class MSManager而非export default class MSManager。这样可以更好地使用TypeScript的类重命名功能。
// 写法一
export class MSManager {}
import {MSManager} from ...;
// 写法二
export default class MSManager {}
import MSManager from ...;
public static readonly instance这样写只能在这个变量声明的后面直接给instance赋值一次,不能在onLoad里面赋值。好处是单例只会被new和赋值一次。
请问下,包含组件的TS 该怎么写?有这个需求哇
什么叫包含组件的TS?用JS举个例子我帮你翻译吧
说的是 官网例子里那个 statics 的形式换到ts怎么写吧?