如何恢复 javascript 类实例

问题描述 投票:0回答:2
class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
 
  sayHello() {
    console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
  }
}

我可以创建实例为

person = new Person('Alice', 30);

但就我而言,我需要创建许多实例来完成其工作并被删除,但我想在其工作完成后重用该实例。 我知道没有像

this.resetInstance()
这样的API,但是有什么方法可以实现这个吗?

javascript class instance
2个回答
0
投票

大多数情况下不值得付出努力。但是,如果你想这样做,就在这里:

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
 
  sayHello() {
    console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
  }

  set(name, age) {
    this.name = name;
    this.age = age;
  }

}
const person = new Person('A', 1000);
person.sayHello(); // Hello, my name is A and I'm 1000 years old.
person.set('B', 2000); 
person.sayHello(); // Hello, my name is B and I'm 2000 years old.

0
投票

只需创建一个缓存即可。

class Person {
  constructor(name, age) {
    console.log('Person constructor run')
    this.name = name;
    this.age = age;
  }
  sayHello() {
    console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
  }
}
const instanceCache = {};
function getInstance(name,age) {
  if(!instanceCache[`${name}${age}`]){
    instanceCache[`${name}${age}`] =  new Person(name,age);
  }
  return instanceCache[`${name}${age}`];
}

const p1 = getInstance('Jack', 18);
const p2 = getInstance('Jack', 18);
const p3 = getInstance('Bob', 20);
console.log(p1 === p2); // true

© www.soinside.com 2019 - 2024. All rights reserved.