Deklarowanie właściwości klasy

0

Który sposób deklaracji właściwości klasy jest poprawny?

class Example1
{
    lol = 0;
}
class Example2
{
    constructor() 
    {
        this.lol = 0;
    }
}
2

Oba sposoby są prawidłowe.

Ten zapis pochodzi z ES6

class Example2
{
    constructor() 
    {
        this.lol = 0;
    }
}

a to jest jedynie skrót pochodzący z ES7 (bodajże, ale nie jestem pewien w której wersji dokładnie to weszło), ale pod spodem nadal jest to zamienianie na wersje z konstruktorem

class Example1
{
    lol = 0;

    /*
      constructor() {
        this.lol = 0;
      }
    */
}
0

Mam taki fragment klasy:

class Lol
{
    firstNumber = "";
    secondNumber = "";
   
    addComma()
    {
        if (jakiś warunek)
        {
            this.puttingComma(this.firstNumber);
        }
        else
        {
            this.puttingComma(this.secondNumber);
        }
    }

    puttingComma(number)
    {
        if (number.includes('.'))
        {
            number += ".";
        }
    }

Metoda puttingComma(number) nie robi tego, czego oczekuję. Gdzie jest błąd?

0

Poczytaj sobie o mutowalności/niezmienności (ang. immutability) w JavaScript.

1
kosmonauta80 napisał(a):

Mam taki fragment klasy:

class Lol
{
    firstNumber = "";
    secondNumber = "";
   
    addComma()
    {
        if (jakiś warunek)
        {
            this.puttingComma(this.firstNumber);
        }
        else
        {
            this.puttingComma(this.secondNumber);
        }
    }

    puttingComma(number)
    {
        if (number.includes('.'))
        {
            number += ".";
        }
    }

Metoda puttingComma(number) nie robi tego, czego oczekuję. Gdzie jest błąd?

Wszędzie w nazwach zmiennych masz number, ale to nie są liczby tylko stringi firstNumber = "", number += ".", więc nazewnictwo jest lekko mylące, ale to najmniej istotne.

Metoda puttingComma działa na razie w taki sposób, że przekazujesz liczbę string, sprawdzasz, czy ma kropkę i jeśli tak to chcesz dodać drugą kropkę.

Powinno być chyba zaprzeczenie if(!number.includes('.')), żeby warunek robił to co chcesz, czyli wykrywał brak kropki.

I jeszcze na dole przykład jak zmodyfikować właściwość klasy po przekazaniu wartości do funkcji.

class Test {
  foo = 0;
  bar = 0;

  changeRandomValue() {
    if (Math.random() > 0.4) {
       this.foo = this.calc(this.foo)
    } else {
      this.bar = this.calc(this.bar)
    }
  }

  calc(value) {
    // nie robimy value = ...
    // tylko zwracamy nową wartość przez return
    return Math.pow(value, 2) + 1;
  }
}
0

Sprawdzę to popołudniu. Chyba zmęczony byłem :]
Czyli jak rozumiem, poprawnie i bez zastrzeżeń przekazuję referencję do pewnej właściwości klasy, pomiędzy metodami tej samej klasy.

0

Przy okazji pytanie odnośnie czytelności. Poniżej to samo zapisane na 2 sposoby. Które podejście jest lepsze?

// dłuższy zapis
if (jakiś warunek)
{
  this.puttingComma(this.firstNumber);
}
else
{
  this.puttingComma(this.secondNumber);
}
// krótszy zapis
(jakiś warunek) ? this.puttingComma(this.firstNumber) : this.puttingComma(this.secondNumber);
2
kosmonauta80 napisał(a):

Sprawdzę to popołudniu. Chyba zmęczony byłem :]
Czyli jak rozumiem, poprawnie i bez zastrzeżeń przekazuję referencję do pewnej właściwości klasy, pomiędzy metodami tej samej klasy.

Poprawnie przekazujesz, ale nie poprawnie przypisałeś wynik, bo zmieniałeś wartość jedynie w obrębie danej metody. W twoim wypadku powinno być coś takiego
this.firstNumber = this.puttingComma(this.firstNumber).

kosmonauta80 napisał(a):

Przy okazji pytanie odnośnie czytelności. Poniżej to samo zapisane na 2 sposoby. Które podejście jest lepsze?

// dłuższy zapis
if (jakiś warunek)
{
  this.puttingComma(this.firstNumber);
}
else
{
  this.puttingComma(this.secondNumber);
}

Kwestia preferencji, co kto woli, ale ja zostawiłbym ten zapis z if/else, albo zamienił na coś takiego

this.puttingComma((jakis_warunek) ? this.firstNumber : this.secondNumber);
1

Poprawiłem i działa:

this.firstNumber = this.puttingComma(this.firstNumber);
//
 puttingComma(number)
{
      if (!number.includes('.'))
      {
        return number += ".";
      }
//
1

Można i tak :)

    puttingComma(number)
    {
        return (number.includes('.') ? (number += ".") : (number);
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1