UNPKG

isotropic-create

Version:

Creates an object with a specific constructor function and prototype object

88 lines (57 loc) 3.06 kB
# isotropic-create [![npm version](https://img.shields.io/npm/v/isotropic-create.svg)](https://www.npmjs.com/package/isotropic-create) [![License](https://img.shields.io/npm/l/isotropic-create.svg)](https://github.com/ibi-group/isotropic-create/blob/main/LICENSE) ![](https://img.shields.io/badge/tests-passing-brightgreen.svg) ![](https://img.shields.io/badge/coverage-100%25-brightgreen.svg) A utility that creates an object with a specific constructor function and prototype object. ## Why Use This? - **Safer Object Creation**: Avoids issues that can occur when forgetting the `new` keyword - **Familiar Semantics**: Retains the `constructor` property you'd expect from `new` - **Explicit Prototypes**: Clearly specifies the prototype object for better code readability - **Controlled Inheritance**: Provides a cleaner approach to prototypal inheritance Really though, for most use cases it's better not to directly use `isotropic-create`. Use [isotropic-make](https://www.npmjs.com/package/isotropic-make) instead! ## Installation ```bash npm install isotropic-create ``` ## Usage ```javascript import _create from 'isotropic-create'; // Define a constructor function const _Person = function (name, age) { const instance = _create(_Person, _Person.prototype); instance.name = name; instance.age = age; return instance; }; // Define methods on the prototype _Person.prototype.greet = function () { return `Hello, my name is ${this.name}`; }; { // Create an instance without using 'new' const john = _Person('John', 30); console.log(john.greet()); // "Hello, my name is John" console.log(john.constructor === _Person); // true console.log(Object.getPrototypeOf(john) === _Person.prototype); // true } ``` ## How It Works `isotropic-create` uses `Object.create()` to create a new object with the specified prototype and then adds the constructor property with the right settings. This approach: 1. Avoids the issues that can occur when forgetting the `new` keyword 2. Explicitly sets the prototype chain 3. Adds the constructor property (non-enumerable) pointing to the constructor function It's important to note that `isotropic-create` creates the instance object but does not call the constructor function! A useful pattern is to use it within a constructor function and then return the instance. ## API ### create(constructorFunction, prototypeObject) Returns a new object with `prototypeObject` as its prototype and a `constructor` property that points to `constructorFunction`. #### Parameters - `constructorFunction` (Function): The constructor function to assign to the object - `prototypeObject` (Object): The prototype object to use #### Returns - (Object): A new object with the specified prototype and constructor ## Contributing Please refer to [CONTRIBUTING.md](https://github.com/ibi-group/isotropic-create/blob/main/CONTRIBUTING.md) for contribution guidelines. ## Issues If you encounter any issues, please file them at https://github.com/ibi-group/isotropic-create/issues