如图。我在基类里这样写的
然后我的子类继承它之后就可以随意点出Ins()了
使用正常。并且一直在这样用
但是啊。我有强迫症
我不想在Ins后面加括号。
这个需要怎么处理?
我尝试吧Ins写成get方法失败了。
有没有大神指点一下。
如图。我在基类里这样写的
然后我的子类继承它之后就可以随意点出Ins()了
使用正常。并且一直在这样用
但是啊。我有强迫症
我不想在Ins后面加括号。
这个需要怎么处理?
我尝试吧Ins写成get方法失败了。
有没有大神指点一下。
可以看下这些
function singleton(target: any, propertyKey: string) {
const privateKey = _${propertyKey}
;
Object.defineProperty(target, propertyKey, {
get: function () {
if (!this[privateKey]) {
this[privateKey] = new this();
}
return this[privateKey];
},
configurable: false,
enumerable: false,
});
}
export class ClassTest {
@singleton
public static instance: ClassTest;
public test() {
cc.log('ClassTest');
}
}
这样也是可以的
貌似不太行,刚试了一下,此处 configurable 为 false 的时候编译报错:Cannot redefine property: instance。修改为 true 后编译通过,使用 ClassTest.instance.test() 调用执行 test 方法时,再次报错: Cannot read properties of undefined (reading ‘test’) 。
你这个是不是需要修改tsconfig的配置项?
好像是加了
“experimentalDecorators”: true,
应该不是这个,这个是启用对装饰器语法的支持,cocos默认是有开启的,你们的target和module设置的是什么版本的?可能跟这个有关
我用的比较 新{
/* Base configuration. Do not edit this field. */
“extends”: “./temp/tsconfig.cocos.json”,
/* Add your custom configuration here. */
"compilerOptions": {
"strict": false,
"lib": ["es2015","ES2018", "dom"],
"experimentalDecorators": true,
"allowSyntheticDefaultImports": true // 需要开启
}
}
刚试了一下,还是不行,看来我跟这个写法无缘,哈哈哈哈,不纠结了,还是继续用之前的方案
没看懂这个帖子, 是get/set没法用吗?
是继承后,inst的类型提示问题
你这个确实解决了Inst的提示问题,但是每次都给创建了一个父类
没办法,像这样的方式,不管是哪个语言,其实都是很麻烦的,毕竟涉及到了静态变量,处理方式就会更麻烦一些
是这样但是要一个基类写成通用的,子类只要继承就行了
用装饰器还是不够优雅,还得单独写个静态成员变量
试了下, 确实不好实现.
我一般是使用 用户代码片段 来写单例.
单例写法老项目用的比较多,现在早淘汰了