1234567891011121314151617181920212223242526272829303132 |
- 'use strict';
- var GetIntrinsic = require('get-intrinsic');
- var $species = GetIntrinsic('%Symbol.species%', true);
- var $TypeError = GetIntrinsic('%TypeError%');
- var IsConstructor = require('./IsConstructor');
- var Type = require('./Type');
- // https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor
- module.exports = function SpeciesConstructor(O, defaultConstructor) {
- if (Type(O) !== 'Object') {
- throw new $TypeError('Assertion failed: Type(O) is not Object');
- }
- var C = O.constructor;
- if (typeof C === 'undefined') {
- return defaultConstructor;
- }
- if (Type(C) !== 'Object') {
- throw new $TypeError('O.constructor is not an Object');
- }
- var S = $species ? C[$species] : void 0;
- if (S == null) {
- return defaultConstructor;
- }
- if (IsConstructor(S)) {
- return S;
- }
- throw new $TypeError('no constructor found');
- };
|