Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 400,000 packages pre-installed, including create with all npm packages installed. Try it out:

var create = require("create")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

create v0.0.2

The missing Native.create() functions that ECMA forgot.

create

The missing Native.create() functions that ECMA forgot.

create is a module for node.js (and someday the browser too) that implements the "missing" .create() functions on the rest of the native data types in JavaScript.

There's already Object.create(). So why not Array.create()? Or Function.create()? Well that's exactly what this module adds functionality for.

In essense, this gives you a clean interface for subclassing the native classes, and also gets all the same benefits that Object.create() gives you, like setting the prototype at creation-time, and being able to pass an object descriptor in to define additional properties.

When you require the module, you invoke it as a function and pass in any native classes you want extended with a .create() function. This can be done with any of the native types.

Installation

Install with npm:

$ npm install create

Example

Let's make a subclass of Array, that includes a remove() function:

require('create')(Array)

// `Array2` is the prototype of our subclass
var Array2 = Object.create(Array.prototype)

// remove() impl from http://ejohn.org/blog/javascript-array-remove
Array2.remove = function (from, to) {
  var rest = this.slice((to || from) + 1 || this.length);
  this.length = from < 0 ? this.length + from : from;
  return this.push.apply(this, rest);
}


// now we can create an instance of Array2
var a = Array.create(Array2)

// add some items to it
a.push(1, 2, 3)
a.push('foo', 'bar')
// [1, 2, 3, 'foo', 'bar']

a.remove(1)
// [1, 3, 'foo', 'bar']

Limitations

This module depends on the writability of the __proto__ property on objects. From a browser standpoint, this module will only work in browsers where that is true (__proto__ MAY be changed). In node this will always work.

Metadata

RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free