graceful-instanceof
Version:
The instanceof mechanism cross package/module versions.
100 lines (73 loc) • 2.34 kB
Markdown
[](https://travis-ci.org/kaelzhang/graceful-instanceof)
[](https://codecov.io/gh/kaelzhang/graceful-instanceof)
<!-- optional appveyor tst
[](https://ci.appveyor.com/project/kaelzhang/graceful-instanceof)
-->
<!-- optional npm version
[](http://badge.fury.io/js/graceful-instanceof)
-->
<!-- optional npm downloads
[](https://www.npmjs.org/package/graceful-instanceof)
-->
<!-- optional dependency status
[](https://david-dm.org/kaelzhang/graceful-instanceof)
-->
The instanceof mechanism cross package versions.
```js
export default class MyClass {
constructor (options) {
if (this instanceof MyClass) {
return options
}
// do something with options
}
}
```
We intend to do something like this:
```js
const instance = new MyClass(options)
instance === new MyClass(instance) // true
```
But what happens if the `instance` is came from another version of the module?
```
abc.js
node_modules
|-- foo
|-- index.js
|-- bar
|-- node_modules
| |-- foo
| |-- index.js
|-- index.js
```
And in abc.js
```js
import bar from 'bar'
import MyClass from 'foo'
bar === new MyClass(bar) // FALSE!!
// Something BOOOOOOOOOOM !!!
```
```sh
$ npm install graceful-instanceof
```
```js
import instanceOf from 'graceful-instanceof'
const type = instanceOf('foo:MyClass')
class MyClass {
constructor (options) {
if (type.is(options)) {
return options
}
type.attach(this)
}
}
const instace = new MyClass(options)
instance === new MyClass(instance) // true
```
And it also works cross versions.
MIT