最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Re-initialize a class instance without creating a new instance? - Stack Overflow

programmeradmin1浏览0评论

I'm wondering if there is a standard way to re-initialize, or re-construct a class instance without creating a new instance all together.

Let's say I have a TestClass instance:

class TestClass {
  constructor() {
    this.x=0;
    this.y=50;
    this.z=200;
  }
}

var testClassInstance=new TestClass();

And basically, overtime I tweak some of it's values.

testClassInstance.x+=250;
testClassInstance.y-=20;

Then later on I want to reset all of its values to whatever was defined when the instance was created. I'm wondering if there is a way to then basically reinitialize it, without creating an entirely new instance?

Is something like

testClassInstance.constructor()

safe and reliable?

I'm wondering if there is a standard way to re-initialize, or re-construct a class instance without creating a new instance all together.

Let's say I have a TestClass instance:

class TestClass {
  constructor() {
    this.x=0;
    this.y=50;
    this.z=200;
  }
}

var testClassInstance=new TestClass();

And basically, overtime I tweak some of it's values.

testClassInstance.x+=250;
testClassInstance.y-=20;

Then later on I want to reset all of its values to whatever was defined when the instance was created. I'm wondering if there is a way to then basically reinitialize it, without creating an entirely new instance?

Is something like

testClassInstance.constructor()

safe and reliable?

Share Improve this question edited Feb 2, 2018 at 0:23 Gage Hendy Ya Boy asked Feb 2, 2018 at 0:11 Gage Hendy Ya BoyGage Hendy Ya Boy 1,5744 gold badges20 silver badges37 bronze badges 6
  • 1 you could add a function to the class that resets the values and call this instead of constructor() – john Smith Commented Feb 2, 2018 at 0:14
  • Why don't you just create another method, let's say reset(), that restores whatever the initial values were. – alanfcm Commented Feb 2, 2018 at 0:14
  • There's a nice answer already, so I won't get in the way. I am curious, though, why do you need this functionality? – Zlatko Commented Feb 2, 2018 at 0:16
  • Your question is totally unclear, you're talking about class, but you want to reset objects. – Ele Commented Feb 2, 2018 at 0:20
  • @Zlatko I should've been more specific. I'm realizing this isn't the actual info I need, but regardless, still useful answers. I'm working with the THREEjs orbit controls, and I need to enable/disable them. But looking at it now, this question isn't relevent to it's syntax. – Gage Hendy Ya Boy Commented Feb 2, 2018 at 0:21
 |  Show 1 more ment

2 Answers 2

Reset to default 8
class TestClass {
  constructor() {
    this.reset();
  }

  reset(){
    this.x=0;
    this.y=50;
    this.z=200;
  }
}

const myTestClass = new TestClass();
myTestClass.x = 5;
console.log(myTestClass.x); // 5
myTestClass.reset();
console.log(myTestClass.x); // 0

This answer was generated because of the first version of this question.

Your class is never modified. The class is an implementation, what you modify are the instances created using that implementation.

Look this code snippet:

class TestClass {
  constructor() {
    this.x=0;
    this.y=50;
    this.z=200;
  }
}

var testClassInstance=new TestClass();

testClassInstance.x+=250;
testClassInstance.y-=20;

console.log(testClassInstance.x);
console.log(testClassInstance.y);

var anotherTestClassInstance=new TestClass();

console.log(anotherTestClassInstance.x);
console.log(anotherTestClassInstance.y);
See? the new object has the initial values declared in TestClass's constructor.

发布评论

评论列表(0)

  1. 暂无评论