TS继承cc.Component的单例?

TS萌新请教怎么继承cc.Component写单例?
@property({
visible: false
})
static Instance : MSManager = null

onLoad () {

    if (MSManager.Instance == null){
        MSManager.Instance = this;
    }

在使用的时候报错找不到 Instance 这个属性,还请各位大神指教

1赞

@toddlxt
没有人回复,而且也搜索了论坛里的帖子,居然没有找到解决方法。所以只能麻烦大神帮忙看下了

因为你把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();
3赞

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();
2赞

感谢,但是我需要挂载组件上。
extend以后,constructor里需要写一个super的调用。
这么写也没办法正常使用instance ,说是只读属性。。。
不知道哪里还是有问题

我知道错哪里了,感谢。你的方法是没问题的
错在 import {MSManager} from “./MSManager”; 里了

1赞

这样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怎么写吧?

2赞