javascript - 在整个代码 javascript 中使用相同的实例
问题描述
Class Life {
constructor(name = 'no name') {
this.name = name;
}
getName() {
return this.name;
}
setName(name = 'no name') {
this.name = name;
}
}
const MyLife = new Life();
export { getName, setName } = MyLife;
export default MyLife;
如何在整个代码中使用相同的new Life()
ie实例MyLife
?
我尝试过的事情;
const MyLife = new Life();
export const getName = MyLife.getName.bind(MyLife);
export const setName = MyLife.setName.bind(MyLife);
export default MyLife;
每次我尝试在另一个文件中使用它时,即myOther.js
从 '../path-of-class.js` 导入 { setName } setName('Luke Skywalker'); // 我得到未定义。
我在这里做错了什么?
PS:该类在另一个库中,我用 webpack 编译它然后在另一个库中使用,<package>
如果在同一个本地使用,上面的类可以正常工作,<package>
但是当我尝试使用 from <package-a>
to <package-b
> 我得到setName
未定义的。
解决方案
尝试将您的 Life 实例保存到可能靠近类的静态变量中,并使用静态方法返回它
class Life {
static getInstance() {
if (!Life.instance) {
Life.instance = new Life();
}
return Life.instance;
}
constructor(name = 'no name') {
this.name = name;
}
getName() {
return this.name;
}
setName(name = 'no name') {
this.name = name;
}
}
Life.instance = null;
export default Life;
在另一个文件中:
import Life from 'module';
const myLife = Life.getInstance();
我不完全确定 webpack 如何处理导入。但是拥有一个类的单个实例并在任何地方使用它是面向对象编程(查找单例)中的常见模式,通常通过将实例的静态变量附加到类并使用静态方法获取它来解决。这个例子通过使用一个 staticinstance
并使用getInstance()
它来返回它或创建一个(如果还没有的话)来实现同样的事情。这是该模式的经典实现。
推荐阅读
- mongodb - MongoDB 副本集没有主节点和无法访问的节点
- python - pdfplumber 给出 fp.seek(pos) AttributeError: 'dict' object has no attribute 'seek'
- python - 如何从 qlineedit 获取所有文本
- python - 如何从文件名中提取特定字符串?
- javascript - ...属性在 react-native 功能组件中
- python - h2o 数值列被转换为枚举
- c# - 如何知道在 EF 中执行查询的位置
- firebase - Flutter Firestore 添加数据
- c++ - 结构中的位是否保证是连续的?
- amazon-web-services - Sendy '与 Amazon SNS API 通信时出错:执行此请求时出现问题'