super-prop

Attaches a property accessor for a super class

Usage no npm install needed!

<script type="module">
  import superProp from 'https://cdn.skypack.dev/super-prop';
</script>

README

super-prop

Attach a property accessor for the super class

Ever wanted some syntactic sugar for calling functions up the prototype chain? The usual technique of BaseClass.prototype.someMethod.call(this) leaves a bit to be desired.

What does super-prop do?

  1. Gives you sugar for calling base/super class methods
  2. Gives you sugar for calling the base/super constructor
  3. Lazy-loads the bindings

More importantly, what does super-prop look like?

Child.prototype.validate = function() {
  // call super class's validate method
  this.super.validate();
  
  // then do my own stuff here
}

Getting Started

Install super-prop

npm install super-prop

When creating a child class..

var superprop = require('super-prop');

// Given you have a Parent 'class' that you are 
// inheriting from, create your Child as follows:
function Child() {
  // This will create a new property called 'super'
  // that can execute the parent methods bound to
  // the current instance
  superprop.define(this, Parent);
  
  // You can also call the super constructor
  // with sugar for Parent.call(this);
  this.super();
}

Now, you can simply access the base/super method via the super property!

Child.prototype.validate = function() {
  // call super class's validate method
  this.super.validate();
  
  // then do my own stuff here
}

Previously, you'd have to use Parent.prototype.validate.call(this). Now we can just use this.super.validate() to do the same thing.

Example

var superprop = require('super-prop')
  , util      = require('util');

// Given a parent class
function Parent() {}
Parent.prototype.greet = function() {
  console.log('Hello!');
}

// Create a child class
function Child() {
  // attaches the property 'super'
  superprop.define(this, Parent);
  
  // call the super constructor
  // which is sugar for: Parent.call(this);
  this.super();
}

// make Child inherit from Parent in standard Node fashion
util.inherits(Child, Parent);

// override greeting on child
Child.prototype.greet = function() {
  this.super.greet();
  console.log('Hola');
}

// create an instance of the child
var child = new Child();

// logs 'Hello' then 'Hola'
child.greet();

Contributing

In lieu of a formal style guide please maintain consistency through the code base and add appropriate unit tests. To validate your code run grunt validate