在整个javascript代码中使用同一实例

时间:2019-07-10 10:04:56

标签: 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()的相同实例,即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不确定。

1 个答案:

答案 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; } 来实现相同的目的。这是这种模式的经典实现。