javascript - 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())
解决方案
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());
例子在这里
推荐阅读
- javascript - JQuery AutoComplete,使用自定义数据手动触发选择回调
- python-3.x - 如果执行时间超过特定持续时间,则退出对 PostgreSQL 数据库执行查询的 Python 函数
- flutter - 当我按下某些东西时隐藏带有动画的小部件
- python - AttributeError:“NoneType”对象没有属性“绑定”
- php - 无法使用 curl 将带有预签名 url 的文件下载到远程服务器
- python - 向现有数据框添加新列并填充 numpy 数组
- laravel - 使用 Laravel 帆(Docker)时,使用 Guzzle 从同一应用程序调用 laravel 端点
- swift - 如何更改快速脚本的应用程序菜单标题和停靠标题
- python - 使用 pyca 验证私钥是否属于证书
- java - java.lang.ClassNotFoundException:升级 Hibernate 依赖项后的 javax.validation.ValidatorFactory