You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
20 lines
750 B
20 lines
750 B
1 year ago
|
'use strict';
|
||
|
var isCallable = require('../internals/is-callable');
|
||
|
var isObject = require('../internals/is-object');
|
||
|
var setPrototypeOf = require('../internals/object-set-prototype-of');
|
||
|
|
||
|
// makes subclassing work correct for wrapped built-ins
|
||
|
module.exports = function ($this, dummy, Wrapper) {
|
||
|
var NewTarget, NewTargetPrototype;
|
||
|
if (
|
||
|
// it can work only with native `setPrototypeOf`
|
||
|
setPrototypeOf &&
|
||
|
// we haven't completely correct pre-ES6 way for getting `new.target`, so use this
|
||
|
isCallable(NewTarget = dummy.constructor) &&
|
||
|
NewTarget !== Wrapper &&
|
||
|
isObject(NewTargetPrototype = NewTarget.prototype) &&
|
||
|
NewTargetPrototype !== Wrapper.prototype
|
||
|
) setPrototypeOf($this, NewTargetPrototype);
|
||
|
return $this;
|
||
|
};
|