atlas-bind-methods

1.0.1 • Public • Published

atlas-bind-methods

Binds an instance's prototype methods to itself.


Why

Suppose you have a class which uses instance variables in its methods:

// Animal.js
module.exports = class Animal {
  constructor(sound){
    this.sound = sound;
  }
  rawr(){
    console.log(this.sound)
  }
}

Normally, the following won't work:

const Animal = require("./Animal");
const cat = new Animal("meow!");
const rawr = cat.rawr;
rawr(); // TypeError: Cannot read property 'sound' of undefined

It fails because the reference loses the method's context, but you already knew that! The fix is pretty simple -- just bind the function to the instance:

...
const rawr = cat.rawr.bind(cat)
rawr() // meow!

But, this is kind of annoying when I have to do this for many methods. Enter atlas-bind-methods...

Example

This package provides a concise function which lets you do the binding in one line:

const Animal = require("./Animal");
const bind = require("atlas-bind-methods");
const cat = bind(new Animal("meow!"));
const rawr = cat.rawr;
rawr() // meow!

Or, if you prefer the side effect, that's fine too:

...
const cat = new Animal("meow!");
bind(cat);
const rawr = cat.rawr;
rawr() // meow!

Caveats

This doesn't support subclassing, so it would only pre-bind the prototype methods of the direct constructor which is used to instantiate the object.

Install

npm install --save atlas-bind-methods

Package Sidebar

Install

npm i atlas-bind-methods

Weekly Downloads

0

Version

1.0.1

License

Apache-2.0

Unpacked Size

5.68 kB

Total Files

6

Last publish

Collaborators

  • atlassubbed