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()
的相同实例,即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>
中本地使用,则上述类可以正常工作,但是当我尝试使用从<package-a>
到<package-b
>,我得到setName
不确定。
答案 0 :(得分:0)
尝试将您的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如何处理导入。但是,只有一个类的实例并在各处使用它是面向对象编程(查找单例)中的一种常见模式,通常通过将实例的静态变量附加到类上并使用静态方法来解决。此示例通过具有静态instance
并使用getInstance()
返回它或创建一个静态double PhysicalValue(signal * s)
{
// access signal by prepending a $
return $s.phys;
}
来实现相同的目的。这是这种模式的经典实现。