atlas-bind-methods
v1.0.1
Published
Binds an instance's prototype methods to itself.
Downloads
3
Maintainers
Readme
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