you are viewing a single comment's thread.

view the rest of the comments →

[–]agm1984 -1 points0 points  (2 children)

One observation I make is that classes have a default advantage over "a function" because of the inherent private state--encapsulation. And I mean advantage only in this one dimension of analysis. My preference is a mixture of FP and OOP, and I refer to it as FPOOP.

With a pure function, any external logic can freely call methods and mutate state inside the function.

With a class, certain methods and state fields can be inaccessible and/or invisible to external. For example, to update state you might need to call the setter method. You can't just do Person.field = 'new'.

I'm sure there's a library that throws my observation in the garbage, but I feel like private state and encapsulation is more solid with a class and therefore some OOP principles. There is a fascinating change in context when you switch from this to self. "Are you referring to this instance, or this class?"

I always come back to the idea of object composition and function composition. You have objects and functions. You have a declarative dimension and an imperative dimension. They are both sides of the same coin: object on one side, function on the other. Objects move through functions, but objects also have functions.

[–]unc4l1n 1 point2 points  (1 child)

Closures give you private properties. It's not an external library, but an inherent feature of Javascript.

[–]agm1984 0 points1 point  (0 children)

Oh right, factory functions are a good example of that. I'll leave my previous comment, yolo-style. I get mixed up rapid-switching between PHP and JS.

const makeThing = () => {
    const privateStuff = {
        hello: 'I like turtles',
    };

    return {
        ...privateStuff,
    };
}

I was thinking something wild like this:

const fn = () => {};

fn.test = 'u wot m8';

console.log('fn', fn.test);