bind-decorator

The fastest automatic method.bind(this) decorator

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
bind-decorator
6741.0.117 years ago8 years agoMinified + gzip package size for bind-decorator in KB

Readme

bind-decorator
Context method binding decorator.
npm version license Build Status Code Climate Test Coverage Issue Count TypeScript Typings
@bind is just a little faster version of @autobind for decorating methods only, by binding them to the current context. It is written in TypeScript and follows the latest decorators proposal.
  • It will throw exceptions if decorating anything other than function;
  • Since the implementation follows the latest decorators proposal where compartion betweeen this and target can not be trusted, @bind will always return a configurable, get accessor propertyDescriptor which will memomize the result of descriptor.value.bind(this) by re-defining the property descriptor of the method beeing decorated (Credits goes to autobind-decorator for memoizing the result).

If you are looking for not just method decorator but rather full class bounding decorator check @autobind.
Install
Install with npm:
$ npm install bind-decorator

NPM
Usage

In JavaScript

import bind from 'bind-decorator';

class Test {
    static what = 'static';
    
    @bind
    static test() {
        console.log(this.what);
    }

    constructor(what) {
        this.what = what;
    }

    @bind
    test() {
        console.warn(this.what);
    }
}

const tester = new Test('bind');
const { test } = tester;
tester.test(); // warns 'bind'.
test(); // warns 'bind'.
Test.test(); // logs 'static'.

In TypeScript

import bind from 'bind-decorator';

class Test {
    public static what: string = 'static';
    
    @bind
    public static test(): void {
        console.log(this.what);
    }

    public constructor(public what: string) {
        this.what = what;
    }

    @bind
    public test(): void {
        console.warn(this.what);
    }
}

const tester: Test = new Test('bind');
const { test } = tester;
tester.test(); // warns 'bind'.
test(); // warns 'bind'.
Test.test(); // logs 'static'.
Testing
  1. npm install

  1. npm test
Contributing
  1. npm install

  1. Make changes

  1. If necessary add some tests to __tests__

  1. npm test

  1. Make a Pull Request