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:

DesignCoder and the future of AI-generated UI

From sketches to code in minutes, DesignCoder shows how AI-generated, hierarchy-aware UIs could change the way developers prototype and ship apps.

Rosario De Chiara
Oct 7, 2025 ⋅ 5 min read

Would You Use If() functions in CSS?

It’s 2025, and CSS finally thinks logically. The if() function brings real conditional styling — no hacks, no JS workarounds. Here’s how to use it right.

Ikeh Akinyemi
Oct 7, 2025 ⋅ 16 min read
Typescript or Zod for Validation?

TypeScript vs Zod: Clearing up validation confusion

Learn when to use TypeScript, Zod, or both for data validation. Avoid redundant checks and build safer, type-sound applications.

Alexander Godwin
Oct 6, 2025 ⋅ 3 min read
Wasm 3 Before GTA 6 LogRocket Article

We got Wasm 3.0 before GTA 6: Meet the web’s new engine

Discover how WebAssembly 3.0’s garbage collector, exception handling, and Memory64 transform Wasm into a true mainstream web platform.

Ikeh Akinyemi
Oct 3, 2025 ⋅ 2 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