Open In App

JavaScript Class Level Fields

Last Updated : 06 Dec, 2021
Improve
Improve
Like Article
Like
Save
Share
Report

In any object-oriented programming language, classes can have private and public fields. Fields are nothing but variables that hold the information. There are two types of fields in an object-oriented programming language i.e, instance fields and static fields. An instance member belongs to a specific instance. 

Example: If we create 3 instances (objects) there will be 3 copies of instance fields in memory whereas there will ever be only one copy of a static field no matter how many instances we create. In simple words, a static variable is a variable that is common for all objects.

Private Instance fields: By default, all the properties of a Class are public and can be modified outside the class. So, in order to declare a private class field, we need to use a # prefix.

Syntax:

#variableName

Let us look at the example below: 

Javascript




<script>
class IncrementCounter {
 
    // Private variable
    #value = 0;
 
    // Public variable
    Count = 0;
 
    Increment() {
        this.#value++;
    }
}
 
const counter = new IncrementCounter();
 
// Raises an error
console.log(counter.#value);
 
// Calling the increment function
counter.increment();
 
// Printing the private variable value
console.log(counter.#value);
</script>


Output:

console.log(counter.#value); 
^
SyntaxError: Private field ‘#value’ must be declared in an enclosing class 
at wrapSafe (internal/modules/cjs/loader.js:1054:16) 
at Module._compile (internal/modules/cjs/loader.js:1102:27) 
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10) 
at Module.load (internal/modules/cjs/loader.js:986:32) 
at Function.Module._load (internal/modules/cjs/loader.js:879:14) 
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12) 
at internal/main/run_main_module.js:17:47

Explanation: In the above example, we are declaring a private variable using #. Running the above script will show an error as “Private field ‘#value’ must be declared in an enclosing class” as we are trying to access a private variable outside the class. So we try to get the value by defining a function as below:

Javascript




<script>
class IncrementCounter {
    #value = 0;
 
    increment() {
        this.#value++;
    }
 
    value() {
 
        // Returning the value of
        // a private variable
        return this.#value;
    }
}
 
const counter = new IncrementCounter();
 
// Calling the function value()
console.log(counter.value());
 
// Calling the function increment()
counter.increment();
 
// Calling the function value()
console.log(counter.value());
</script>


Output:  

0
1

Private static fields: A static field can be created by using the keyword static. Sometimes even the static fields are kept hidden, and you can make them private. 

Syntax:

static #staticFieldName

Let us look at the example below: 

Javascript




<script>
class User {
 
    // Private static field of string type
    static #name = "";
 
    // Private static field
    static #age
 
    // Constructor function
    Person(user_name, user_age) {
        User.#name = user_name;
        User.#age = user_age;
        return User.#name + ' ' + User.#age;
    }
}
 
// Create an object user1
user1 = new User();
console.log(user1.Person("John", 45));
 
// Create an object user2
user2 = new User()
console.log(user1.Person("Mark", 35));
</script>


Output:

John 45
Mark 35

Explanation: To invoke a static field, we need to use the name of the constructor class. In the above example, we are creating a private static field name by using the keyword static and # for the private field and initializing it to an empty string. Similarly, we are creating a private static field age. Now in order to invoke the above-created fields, we are using the name of the constructor class User as User.#name and User.#age. 

Public Instance Fields: By default, all the properties of a class are public and can be easily accessed outside the class. You can initialize the value of the variable along with the declaration.

Let us look at the example below:

Javascript




<script>
class IncrementCounter {
 
    // Public instance field
    value = 1;
 
    Increment() {
        return this.value++;
    }
}
 
const counter = new IncrementCounter();
 
// Accessing a public instance field
console.log(counter.value);
 
// Calling the Increment function
counter.Increment();
 
// Printing the updated value
console.log(counter.value);
</script>


Output:

1
2

Explanation: In the above example, value is declared as a public instance and initialized to 1, so we are easily able to access it using counter.value. There is no restriction on accessing and modifying a public instance field inside the constructor, methods, and also outside the class.

Public static Fields: As we have discussed before the static fields are created by using the static keyword as static staticFieldName. 

Let us look at the example below:

Javascript




<script>
class Example {
 
    // Private static field
    static value = 42;
}
 
// Accessing a public static field using
// name of the Constructor class
console.log(Example.value)
 
console.log(Example.value === 42);
</script>


Output:

42
true

Explanation: As you can see we can easily access the public static field outside the class by using the class name.  



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads