Skip to content

Commit

Permalink
feat: prototype/is
Browse files Browse the repository at this point in the history
  • Loading branch information
medikoo committed Apr 3, 2019
1 parent 3c8767b commit b23bdcc
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 0 deletions.
14 changes: 14 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,20 @@ ensureObject(obj); // obj
ensureString(null); // Thrown TypeError: null is not an object
```

#### Prototype

_Prototype_ is assumed to be some constructor's `prototype` property

##### `prototype/is`

```javascript
const isPrototype = require("type/prototype/is");

isPrototype({}); // false
isPrototype(Object.prototype); // true
isPrototype(Array.prototype); // true
```

### Tests

$ npm test
Expand Down
9 changes: 9 additions & 0 deletions prototype/is.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
"use strict";

var isObject = require("../object/is");

module.exports = function (value) {
if (!isObject(value)) return false;
if (!value.constructor) return false;
return value.constructor.prototype === value;
};
39 changes: 39 additions & 0 deletions test/prototype/is.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
"use strict";

var assert = require("chai").assert
, isPrototype = require("../../prototype/is");

describe("prototype/is", function () {
it("Should return true on prototype", function () {
assert.equal(isPrototype(Object.prototype), true);
});
it("Should return false on plain object", function () {
assert.equal(isPrototype({}), false);
});
it("Should return false on function", function () {
assert.equal(isPrototype(function () { return true; }), false);
});
it("Should return false on array", function () { assert.equal(isPrototype([]), false); });
if (typeof Object.create === "function") {
it("Should return false on object with no prototype", function () {
assert.equal(isPrototype(Object.create(null)), false);
});
}
it("Should return false on string", function () { assert.equal(isPrototype("foo"), false); });
it("Should return false on empty string", function () {
assert.equal(isPrototype(""), false);
});
it("Should return false on number", function () { assert.equal(isPrototype(123), false); });
it("Should return false on NaN", function () { assert.equal(isPrototype(NaN), false); });
it("Should return false on boolean", function () { assert.equal(isPrototype(true), false); });
if (typeof Symbol === "function") {
it("Should return false on symbol", function () {
assert.equal(isPrototype(Symbol("foo")), false);
});
}

it("Should return false on null", function () { assert.equal(isPrototype(null), false); });
it("Should return false on undefined", function () {
assert.equal(isPrototype(void 0), false);
});
});

0 comments on commit b23bdcc

Please sign in to comment.