@mahdi.golzar/decorator

1.0.0 • Public • Published

Dynamic Decorator Example

This project demonstrates how to create and use a dynamic decorator in a Node.js environment without using any external packages.

Table of Contents

Installation

To get started, clone this repository and install any necessary dependencies.

git clone https://github.com/your-username/dynamic-decorator-example.git
cd dynamic-decorator-example
npm install

Usage

You can run the example by executing:

node index.js

How It Works

DynamicDecorator Class

The DynamicDecorator class is defined in DynamicDecorator.js. It takes options as a parameter and has an apply method that modifies the behavior of the target method.

// DynamicDecorator.js
class DynamicDecorator {
  constructor(options) {
    this.options = options;
  }

  apply(target, propertyKey, descriptor) {
    const originalMethod = descriptor.value;

    descriptor.value = (...args) => {
      console.log(`Method ${propertyKey} called with args: ${JSON.stringify(args)}`);
      console.log(`Decorator options: ${JSON.stringify(this.options)}`);

      const result = originalMethod.apply(this, args);

      console.log(`Method ${propertyKey} returned: ${result}`);
      return result;
    };

    return descriptor;
  }
}

module.exports = DynamicDecorator;

Applying the Decorator

The DynamicDecorator is applied to the hello method of the Example class in index.js.

// index.js
const DynamicDecorator = require('./DynamicDecorator');
class Example {
  hello(name) {
    return `Hello, ${name}!`;
  }
}
// Create an instance of the decorator
const decoratorInstance = new DynamicDecorator({ log: true });
// Manually apply the decorator
const descriptor = Object.getOwnPropertyDescriptor(Example.prototype, 'hello');
const decoratedDescriptor = decoratorInstance.apply(Example.prototype, 'hello', descriptor);
Object.defineProperty(Example.prototype, 'hello', decoratedDescriptor);

const example = new Example();
console.log(example.hello('World'));

Example Output

When you run node index.js, you should see the following output:

Method hello called with args: ["World"]
Decorator options: {"log":true}
Method hello returned: Hello, World!
Hello, World!

/@mahdi.golzar/decorator/

    Package Sidebar

    Install

    npm i @mahdi.golzar/decorator

    Weekly Downloads

    4

    Version

    1.0.0

    License

    ISC

    Unpacked Size

    3.32 kB

    Total Files

    3

    Last publish

    Collaborators

    • mahdi.golzar