FAQ: Classes - Static Methods

This community-built FAQ covers the “Static Methods” exercise from the lesson “Classes”.

Paths and Courses
This exercise can be found in the following Codecademy content:

Web Development

Introduction To JavaScript

FAQs on the exercise Static Methods

There are currently no frequently asked questions associated with this exercise – that’s where you come in! You can contribute to this section by offering your own questions, answers, or clarifications on this exercise. Ask or answer a question by clicking reply (reply) below.

If you’ve had an “aha” moment about the concepts, formatting, syntax, or anything else with this exercise, consider sharing those insights! Teaching others and answering their questions is one of the best ways to learn and stay sharp.

Join the Discussion. Help a fellow learner on their journey.

Ask or answer a question about this exercise by clicking reply (reply) below!

Agree with a comment or answer? Like (like) to up-vote the contribution!

Need broader help or resources? Head here.

Looking for motivation to keep learning? Join our wider discussions.

Learn more about how to use this guide.

Found a bug? Report it!

Have a question about your account or billing? Reach out to our customer support team!

None of the above? Find out where to ask other questions here!

static generatePassword(){
const randomNumber = math.floor(math.random()*10000);
return randomNumber;
}
I made this code and instead of returning, it returns an error. Can anyone tell me what i did wrong?

Math is a special object, as in a class of its own. We generally refer to classes by their capitalized names.

Math.floor(Math.random())
3 Likes

“Sometimes you will want a class to have methods that aren’t available in individual instances, but that you can call directly from the class.”

Why? What is gained by not having a specific method available in instance?

14 Likes

static generatePassword() {
const password = Math.floor(Math.random() * 10000);
return password;
}
the above was in the HospitalEmployee class.

At the end of main.jsp, i logged console.log(HospitalEmployee.generatePassword);
but it gave me [Function: generatePassword]
instead of generating a random integer between zero and 10000.

Can someone please tell me if i logged it correctly?

Remember to invoke the function with () else you are only logging the object reference.

2 Likes

Hi, thanks for your reply and pointing out my error.
I changed it to the log below

console.log(HospitalEmployee.generatePassword());

and it came back as undefined though.

Is it right that a static method can only be called by appending it to its class? And a non-static method can only be called by appending it to its instance?
When do we use static and when non-static methods?

1 Like

why we use Math.floor(Math.random() * 10000).
and not Math.floor(Math.random() -= 10000)?

Consider,

Math.random() generates a float less than 1, or equal to zero.

{x | 0 <= x < 1; x is Real}

Please, can you tell us why we would want to subtract a large number, or any number, from this generated value?

Further,

let r, multiplier, offset;
multiplier = 10
offset = 1
r = Math.random() * multiplier + offset

The above will generate a float between 1.0 and 10.999…, inclusive.

{r | 1.0 <= r <= 10.999...; r is Real}

When we floor a float value, the result is the nearest integer less than the value.

q = Math.floor(Math.random() * multiplier + offset)

The above will generate an integer between 1 and 10, inclusive.

{q | 1 <= q <= 10)

thanks for the quick answer

1 Like

According to description in this exercise, static methods can only be accessed by the object of class in which they are declared but in the below code i am accessing static method by another class Nurse and it is running fine why??
class HospitalEmployee {

constructor(name) {

this._name = name;

this._remainingVacationDays = 20;

}

static generatePassword(){

return Math.floor(Math.random()*10000);

}

get name() {

return this._name;

}

get remainingVacationDays() {

return this._remainingVacationDays;

}

takeVacationDays(daysOff) {

this._remainingVacationDays -= daysOff;

}

}

class Nurse extends HospitalEmployee {

constructor(name, certifications) {

super(name);

this._certifications = certifications;

}

get certifications() {

return this._certifications;

}

addCertification(newCertification) {

this.certifications.push(newCertification);

}

}

const nurseOlynyk = new Nurse(‘Olynyk’, [‘Trauma’,‘Pediatrics’]);

nurseOlynyk.takeVacationDays(5);

console.log(nurseOlynyk.remainingVacationDays);

nurseOlynyk.addCertification(‘Genetics’);

console.log(nurseOlynyk.certifications);

console.log(Nurse.generatePassword()); //Instead of error it is printing random number.

1 Like

Because, class Nurse extends HospitalEmployee.

I keep getting an error on test.js with the code below. Code ran without problems on VSC.

class HospitalEmployee {

    constructor(name) {

      this._name = name;

      this._remainingVacationDays = 20;

    }

    

    get name() {

      return this._name;

    }

    

    get remainingVacationDays() {

      return this._remainingVacationDays;

    }

    

    takeVacationDays(daysOff) {

      this._remainingVacationDays -= daysOff;

    }

    static generatePassWord(){

        const passWord = Math.floor(Math.random() * 10000);

        return passWord; 

      }

  }

  

  class Nurse extends HospitalEmployee {

    constructor(name, certifications) {

      super(name);

      this._certifications = certifications;

    } 

    

    get certifications() {

      return this._certifications;

    }

    

    addCertification(newCertification) {

      this.certifications.push(newCertification);

    }

  }

  

  const nurseOlynyk = new Nurse('Olynyk', ['Trauma','Pediatrics']);

  nurseOlynyk.takeVacationDays(5);

  console.log(nurseOlynyk.remainingVacationDays);

  nurseOlynyk.addCertification('Genetics');

  console.log(nurseOlynyk.certifications);

  console.log(HospitalEmployee.generatePassWord())

The error message is as follows:

/home/ccuser/workspace/learn-javascript-classes-classes-static-methods/test/test.js:42
const randomNumberOne = HospitalEmployee.generatePassword();
^

TypeError: HospitalEmployee.generatePassword is not a function
    at Suite.<anonymous> (/home/ccuser/workspace/learn-javascript-classes-classes-static-methods/test/test.js:42:46)
    at context.describe.context.context (/home/ccuser/node_modules/mocha/lib/interfaces/bdd.js:47:10)
    at Object.<anonymous> (/home/ccuser/workspace/learn-javascript-classes-classes-static-methods/test/test.js:11:1)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at Module.require (module.js:498:17)
    at require (internal/module.js:20:19)
    at /home/ccuser/node_modules/mocha/lib/mocha.js:220:27
    at Array.forEach (native)
    at Mocha.loadFiles (/home/ccuser/node_modules/mocha/lib/mocha.js:217:14)
    at Mocha.run (/home/ccuser/node_modules/mocha/lib/mocha.js:469:10)
    at Object.<anonymous> (/home/ccuser/node_modules/mocha/bin/_mocha:404:18)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at Module.runMain (module.js:605:10)
    at run (bootstrap_node.js:427:7)
    at startup (bootstrap_node.js:151:9)
    at bootstrap_node.js:542:3

Please tell us more about the error. If you can still edit your post, can you please select all the code and click the </> button in the tool tray so it retains its original formatting.

1 Like

Thank you for your swift reply. I have formatted my original post, and have also copied and pasted the error message as well.

1 Like

Check your spelling. There is a mismatch.

Got it, thank you. It was a very subtle typo and it is now working perfectly.

Once again, thanks a lot!

1 Like

Math.floor(Math.random() * 10000)
To return an integer between 1 and 10000, I thought the above hint number should be 10001?

Welcome to the forums, @tag2820621251, and you would be right except for one tiny detail…

 x = Math.floor(Math.random() * 10001)

// {x | 0 <= x < 10001; x is a member of the Set of Integers}

The above inequality describes zero as being part of the solution set.

We would be correct in using the expression in your post if we add 1 so as to shift the entire solution one to the right.

Math.floor(Math.random() * 10000) + 1