diff --git a/packages/babel-plugin-transform-instanceof/README.md b/packages/babel-plugin-transform-instanceof/README.md index 9efe6b05a2..6b2a13e5e2 100644 --- a/packages/babel-plugin-transform-instanceof/README.md +++ b/packages/babel-plugin-transform-instanceof/README.md @@ -1,5 +1,29 @@ # @babel/plugin-transform-instanceof +> Wraps `instanceof` expressions to allow constructors to customize the logic with a `Symbol.hasInstance` method + +## Example + +**In** + +```javascript +foo instanceof Bar; +``` + +**Out** + +```javascript +function _instanceof(left, right) { + if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) { + return right[Symbol.hasInstance](left); + } else { + return left instanceof right; + } +} + +_instanceof(foo, Bar); +``` + ## Installation ```sh @@ -31,3 +55,8 @@ require("@babel/core").transform("code", { plugins: ["@babel/plugin-transform-instanceof"] }); ``` + +## References + +* [ES6 Spec: InstanceOf Operator Semantics](https://www.ecma-international.org/ecma-262/6.0/#sec-instanceofoperator) +* [MDN: Symbol.hasInstance](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance)