Open In App

JavaScript Class Level Fields

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.  



Last Updated : 06 Dec, 2021
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads