|
|
@ -5,6 +5,7 @@ const { |
|
|
|
hexTable, |
|
|
|
isHexTable |
|
|
|
} = require('internal/querystring'); |
|
|
|
const { getConstructorOf } = require('internal/util'); |
|
|
|
const binding = process.binding('url'); |
|
|
|
const context = Symbol('context'); |
|
|
|
const cannotBeBase = Symbol('cannot-be-base'); |
|
|
@ -171,17 +172,6 @@ function onParseHashComplete(flags, protocol, username, password, |
|
|
|
this[context].fragment = fragment; |
|
|
|
} |
|
|
|
|
|
|
|
function getEligibleConstructor(obj) { |
|
|
|
while (obj !== null) { |
|
|
|
if (Object.prototype.hasOwnProperty.call(obj, 'constructor') && |
|
|
|
typeof obj.constructor === 'function') { |
|
|
|
return obj.constructor; |
|
|
|
} |
|
|
|
obj = Object.getPrototypeOf(obj); |
|
|
|
} |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
class URL { |
|
|
|
constructor(input, base) { |
|
|
|
// toUSVString is not needed.
|
|
|
@ -220,7 +210,7 @@ class URL { |
|
|
|
if (typeof depth === 'number' && depth < 0) |
|
|
|
return opts.stylize('[Object]', 'special'); |
|
|
|
|
|
|
|
const ctor = getEligibleConstructor(this); |
|
|
|
const ctor = getConstructorOf(this); |
|
|
|
|
|
|
|
const obj = Object.create({ |
|
|
|
constructor: ctor === null ? URL : ctor |
|
|
|