2020-06-08
1107
#vanilla javascript
Gbolahan Olagunju
19958
Jun 8, 2020 â‹… 3 min read

How to decide between classes v. closures in JavaScript

Gbolahan Olagunju Let's have a chat about your project. Find me on Twitter @iamgbols.

Recent posts:

next js environmental variables

How to configure Next.js environmental variables

Learn how to manage environment variables in Next.js, which influence how an application behaves in different contexts and environments.

Joseph Mawa
Apr 25, 2025 â‹… 9 min read
useActionState in React

useActionState in React: A practical guide with examples

Discover how React’s useActionState Hook makes it easier to handle user actions, especially form submissions and async state changes.

Rishi Purwar
Apr 25, 2025 â‹… 5 min read
three js vs babylon js

Three.js vs. Babylon.js: Which is better for 3D web development?

Compare two libraries that support creating 3D experiences in the browser. Learn how to get started with each, their core features, and key differences.

Elijah Asaolu
Apr 24, 2025 â‹… 7 min read
how to use the Next.js Image component to optimize images

How to use the Next.js Image component to optimize images

Explore automatic image optimization using Next Image, the built-in image optimization solution for Next.js.

Adebiyi Adedotun
Apr 23, 2025 â‹… 7 min read
View all posts

3 Replies to "How to decide between classes v. closures in JavaScript"

  1. Why aren’t you building your Closure like your class and getting the best of both worlds?

    let UserClosure = function(firstName, lastName, age, occupation) {
    this.firstName = params.firstName;
    this.lastName = params.lastName;
    this.age = age;
    this.occupation = occupation;

    let privateValue = “Can’t see this!”;
    function privateFunction(args) { // private method }
    }
    UserClosure.prototype.getAge = function() { return this.age; }
    UserClosure.prototype.describeSelf = function() { …. };

    let someOne = new UserClose(“first”, “last”, 55, “dev”);

    This isn’t intended as argumentative. I’m looking for why I should start using classes instead of the above construction in some upcoming work.

  2. Here’s how to get the best of both worlds.

    const Foo = (function() {
    //create a prototype.
    const prot = {
    bar(bas) {
    bas = bas || this.fallbackBas;
    console.log(“bar says ” + bas);
    }
    } //end of prot.

    //constructor.
    return function(fallback) {
    const o = Object.create(prot);
    //new object, prot as prototype.
    o.fallbackBas = fallback;
    return o;
    } //constructor
    })(); //iif

    const f = new Foo(“This is a fallback.”);
    f.bar(“This is not a fallback.”);
    f.bar();

    /*Output:

    bar says This is not a fallback.
    bar says This is a fallback.
    */

    All the funcs are created only once, and other vars can go in the same outer func.

Leave a Reply