Skip to content

Instantly share code, notes, and snippets.

@alonsogarciapablo
Last active June 25, 2024 07:48
Show Gist options
  • Save alonsogarciapablo/110b92c3d19f0074dd416286cae1a036 to your computer and use it in GitHub Desktop.
Save alonsogarciapablo/110b92c3d19f0074dd416286cae1a036 to your computer and use it in GitHub Desktop.
Encapsulating collections in JavaScript 🎁
class Team {
constructor(members) {
this._members = members;
}
get members() {
return this._members;
}
set members(members) {
this._members = members;
}
}
const team = new Team([ mike, john] );
// Add a member
team.members.push(peter);
// Remove a member
const index = team.members.indexOf(peter);
team.members.splice(index, 1);
// Replace the members
team.members = [ mike, john, peter ];
// Get the number of members
console.log(team.members.length);
// Iterate through the members
for (let member of team.members) {
console.log(member.fullname);
}
class Team {
constructor(members) {
// We store a "copy" of the collection
this._members = members.slice();
}
addMember(member) {
return this._members.push(peter);
}
removeMember(member) {
const index = this._members.indexOf(member);
return this._members.splice(index, 1);
}
set members(members) {
this._members = members.slice();
}
get length() {
return this._members.length;
}
[Symbol.iterator]() {
return this._people[Symbol.iterator]();
}
}
// Add a member
team.addMember(peter);
// Remove a member
team.removeMember(peter);
// Replace the members
team.members = [ mike, john, peter ];
// Get the number of members
console.log(team.length);
// Iterate through the members
for (let member of team) {
console.log(member.fullname);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment