npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@hbieshaar/easy-class

v1.0.0

Published

Simple ES5 classes

Downloads

1

Readme

easy-class

The module easy-class simplifies using ES5 classes.

It does this by providing 2 functions. The function subClass(subCtor, baseCtor) will, in most cases, be the only one needed. In case you need to derive an ES5 class from a class made by the new ES6 class syntax, the function assignOwn(target, source) may be needed.

function subClass(subCtor, baseCtor)

This function can be used to chain ES5 classes.

subClass() example

This example shows a base ES5 class Animal, and a derived ES5 class Bird.

import EasyClass from 'easy-class'

function Animal() {
  // Animal initialisation
}

Animal.prototype = {
  // Animal methods, initial values and constants
}

EasyClass.subClass(Animal, Object);

function Bird() {
  Animal.call(this);

  // Other Bird initialisations
}

Bird.prototype = {
  // Bird methods, initial values and constants
}

// chain the ES5 classes
EasyClass.subClass(Bird, Animal);

The function subClass() does 3 things:

  1. it tests the existence of an own property constructor, and if it does not exist, creates an non-enumerabe property constructor.
    In the example, by assigning an object to Animal.prototype and Bird.prototype, the original constructor properties were lost. The calls to subClass() recreated them.
  2. it chains set the prototype of Bird.prototype to Animal.prototype.
  3. it chains the constructor functions, i.e. it sets the prototype of Bird() to Animal(). Note: this has nothing to do with Bird.prototype or Animal.prototype.
    This is a chaining of static properties/methods which are assigned to the Bird() and Animal() functions.

function assignOwn(target, source)

This function can be used to derive a ES5 subclass from an ES6 class. The following code will not work.

class EsSix {
  constructor() {}
}

function EsFive() {
  EsSix.call(this);   // DOES NOT WORK
}

The reason: the constructor of an ES6 class can not be called without the new keyword. A "solution" that will work most of the time:

function EsFive() {
  Object.assign(this, newEsSix());
}

Object.assign() only copies own enumerable properties/methods, but that will do in most cases. The function assignOwn() copies all own properties/methods, and also copies all own symbols.
Apart from in tests, I have never had to use it.