Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
How to share private members among common instances in JavaScript?
In JavaScript, private members are variables that cannot be accessed directly from outside a constructor function or class. However, you can share private members among instances using closures and static variables.
Understanding Private Members
Private members are created using local variables inside constructor functions. They can only be accessed through public methods defined within the same scope.
Example: Basic Private Members
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Private Members Example</title>
</head>
<body>
<h1>Share Private Members Among Common Instances</h1>
<div id="result"></div>
<button onclick="displayPersonData()">Show Person Data</button>
<script>
function Person(name) {
let personName = name; // Private member
this.returnName = function() {
return personName;
};
}
let person1 = new Person("Rohan");
let person2 = new Person("Shawn");
function displayPersonData() {
const result = document.getElementById("result");
result.innerHTML =
"person1.returnName() = " + person1.returnName() + "<br>" +
"person2.returnName() = " + person2.returnName() + "<br>" +
"person1.personName = " + person1.personName + "<br>" +
"person2.personName = " + person2.personName;
}
</script>
</body>
</html>
Output
person1.returnName() = Rohan person2.returnName() = Shawn person1.personName = undefined person2.personName = undefined
Sharing Private Members Using Closures
To share private data among all instances, you can use an IIFE (Immediately Invoked Function Expression) to create a shared closure:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Shared Private Members</title>
</head>
<body>
<h1>Shared Private Members Example</h1>
<div id="shared-result"></div>
<button onclick="testSharedMembers()">Test Shared Members</button>
<script>
const PersonWithShared = (function() {
let instanceCount = 0; // Shared private member
let instances = []; // Shared array
function Person(name) {
let personName = name;
instanceCount++;
instances.push(this);
this.getName = function() {
return personName;
};
this.getInstanceCount = function() {
return instanceCount;
};
this.getAllInstances = function() {
return instances.length;
};
}
return Person;
})();
function testSharedMembers() {
const person1 = new PersonWithShared("Alice");
const person2 = new PersonWithShared("Bob");
const person3 = new PersonWithShared("Charlie");
const result = document.getElementById("shared-result");
result.innerHTML =
"person1.getName() = " + person1.getName() + "<br>" +
"person2.getName() = " + person2.getName() + "<br>" +
"person3.getName() = " + person3.getName() + "<br>" +
"Total instances (from person1): " + person1.getInstanceCount() + "<br>" +
"Total instances (from person2): " + person2.getInstanceCount() + "<br>" +
"All instances count: " + person3.getAllInstances();
}
</script>
</body>
</html>
Output
person1.getName() = Alice person2.getName() = Bob person3.getName() = Charlie Total instances (from person1): 3 Total instances (from person2): 3 All instances count: 3
Key Points
- Private members are created using local variables inside constructor functions
- They cannot be accessed directly from outside the constructor
- Use closures and IIFE patterns to share data among all instances
- Shared private members maintain their state across all instances
Conclusion
Private members in JavaScript provide encapsulation, while closures enable sharing data among instances. This pattern is useful for maintaining shared state like counters or configuration data across all instances of a constructor function.
