请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

想请教下课程中为什么要通过类暴露特定api去获取单例接口?

如果我用这样的写法也可以实现单例。这种写法和课程中的写法应该怎么取舍?

class SingleObject {
    static obj = null;
    constructor(){
        if(!SingleObject.obj){
            SingleObject.obj = this;
        }
        return SingleObject.obj
    }
}

正在回答 回答被采纳积分+3

1回答

双越 2024-05-19 09:50:54


你这种写法,如果再扩展 API 或属性,就比较麻烦了。

因为 obj 是一个普通对象,不是某个 class 创建的。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕码人8194681 #1
    没能理解。老师能不能举个例子说明一下。为什么obj是一个普通对象,所以再扩展API或属性就会比较麻烦?谢谢
    回复 有任何疑惑可以回复我~ 2024-05-19 11:55:34
  • 双越 回复 提问者 慕码人8194681 #2
    例如你要扩展两个方法 a1 和 a2 ,你应该怎么写代码呢?
    回复 有任何疑惑可以回复我~ 2024-05-19 17:28:53
  • 提问者 慕码人8194681 回复 双越 #3
    回复 双越:直接这样子写不可以吗?
    class SingleObject {
        static obj = null;
        constructor(){
            if(!SingleObject.obj){
                SingleObject.obj = this;
            }
            return SingleObject.obj
        }
        a1(){
            console.log(1)
        }
        a2(){
            console.log(2)
        }
    }
    
    而且obj为什么是普通对象?构造函数中的this对象不就是class的实例吗?
    const so = new SingleObject();
    console.log(SingleObject.obj instanceof SingleObject) // 返回true
    回复 有任何疑惑可以回复我~ 2024-05-19 23:29:29
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信