首页 > 解决方案 > Javascript 函数返回对象,其中包含 3 个函数定义,但 IntelliSense 不适用于该返回类型

问题描述

我在 javascript 中编写了一个 Logger 函数,这是一个单例函数,从该函数我返回一个包含两个函数定义的对象,所以当我创建该类的对象时,我得到返回的对象包含函数定义,并且当我想在该返回值上调用某些内容时,我的代码 IntelliSense 不起作用,任何人都可以帮助我使用 IntelliSense。也分享代码。我得到了getInstance方法的 IntelliSense,但是当我想使用obj.setDebug时,我没有得到任何代码建议或 IntelliSense。

在此处输入图像描述

我没有得到那个 Obj.isDebug 自动完成

const Logger = () => {
  let instance = null
  _isDebug = false

  let setDebug = (value = false) => {
    _isDebug = value
  }

  let isDebug = () => {
    return _isDebug
  }

  createInstance = () => ({
    setDebug,
    isDebug,
    log
  })

  return {
    getInstance: () => {
      if (!instance) {
        instance = createInstance()
      }
      return instance
    }
  }
}

const Log = Logger()
const obj = Log.getInstance();

console.log(obj.setDebug())
console.log(obj.isDebug())

标签: javascriptclosures

解决方案


getInstance定义时自动做Log,会更简单:

const Logger = () => {
  // Set app
  const app = {
    // Set _isDebug option
    _isDebug: false,
    // Set setDebug method
    setDebug: (value = false) => app._isDebug = value,
    // Get isDebug method
    isDebug: (value = false) => app._isDebug
  };
  
  return app;
}

const Log = Logger();

Log.setDebug(true);
console.log(Log.isDebug());

例子在这里

如果您需要使用单独getInstance方法的更复杂的功能,只需按照逻辑并随意添加所需的附加层......下面的代码只是示例。在给定的上下文中,正如我之前提到的,这是毫无意义的:

const Logger = () => {
  // Set app
  const app = {
    // Set _isDebug option
    _isDebug: false,
    // Set isDebug method
    setDebug: (value = false) => app._isDebug = value,
    // Get isDebug method
    isDebug: (value = false) => app._isDebug
  };
  
  // Initiator
  const initiator = {
    // Set init status var
    instance: false,
    // Set getInstance method
    getInstance: () => {
      if(!initiator.instance) initiator.instance = app;
      return initiator.instance;
    }
  }
  
  return initiator;
}

const Log = Logger();
const obj = Log.getInstance();

obj.setDebug(true);
console.log(obj.isDebug());

例子在这里


推荐阅读