Show More
Commit Description:
submission report
Commit Description:
submission report
References:
File last commit:
Show/Diff file:
Action:
node_modules/es-abstract/2016/SpeciesConstructor.js
| 32 lines
| 846 B
| application/javascript
| JavascriptLexer
|
r789 | 'use strict'; | |||
var GetIntrinsic = require('../GetIntrinsic'); | ||||
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'); | ||||
}; | ||||