Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Converting function to es6 class

I am working on learning how to use es6 class and need some help in understanding how this would be converted from a function to a class:

function MyModel(make, year) {
    var carType = this;

    carType.make = make;

    // function that I have further in code
    sellCar(carType, year);
}

What I am trying to accomplish is something like this:

class MyModel {
  constructor(make, year) {
    this.make = make;
    this.year = year;

    sellCar(this.make, this.year);
  }
}

What I get confused about is what I do about the reference I have to this that I reference from the variable. Do I need that? I use that in other parts of my code, but would rather refactor to not do so.

The sticky point for me right now is assigning this to carType. If I put the code below in my constructor, how do I point a reference to this from carType?

like image 307
pertrai1 Avatar asked May 31 '26 22:05

pertrai1


1 Answers

Your original code is needlessly complicated and doesn't make sense

function MyModel(make, year) {
    var carType = this;

    carType.make = make;

    // function that I have further in code
    sellCar(carType, year);
}

It could be written as

function MyModel(make, year) {
  this.make = make;
  sellCar(this, year);
}

In ES6, it's a trivial transform

class MyModel {
  constructor (make, year) {
    this.make = make;
    sellCar(this, year);
  }
}

ES6 classes are just syntactic sugar, so the functionality is going to be identical (provided you always invoke the constructor with the new keyword (which you should))

But what is sellCar? The return value is discarded so I have to believe that sellCar has some other kind of side effect.

like image 127
Mulan Avatar answered Jun 03 '26 12:06

Mulan



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!