Question

I'm a bit confused by node.js require system.

I know how to export or module.export function of the required component, but not sure how to enhance js Object with prototype.

For instance, I have a code to enhance js Object with prototype.watch method.

I will have this code in my own npm package, and import with node require.

What is the best manner to do this? Do I need to refactor this code as a function to export and need to execute after require? Thanks.

if (!Object.prototype.watch)
{
    Object.defineProperty(Object.prototype, "watch",
    {
        enumerable: false,
        configurable: true,
        writable: false,
        value: function(prop, handler)
        {
            var
            oldval = this[prop],
                newval = oldval,
                getter = function()
                {
                    return newval;
                },
                setter = function(val)
                {
                    oldval = newval;
                    return newval = handler.call(this, prop, oldval, val);
                };

            if (delete this[prop])
            { // can't watch constants
                Object.defineProperty(this, prop,
                {
                    get: getter,
                    set: setter,
                    enumerable: true,
                    configurable: true
                });
            }
        }
    });
}

// object.unwatch
if (!Object.prototype.unwatch)
{
    Object.defineProperty(Object.prototype, "unwatch",
    {
        enumerable: false,
        configurable: true,
        writable: false,
        value: function(prop)
        {
            var val = this[prop];
            delete this[prop]; // remove accessors
            this[prop] = val;
        }
    });
}
Was it helpful?

Solution

All modules in node.js share the same global scope.

Just require() it and any changes you make to global objects will propagate.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top