Permalink
Browse files

url: set toStringTag for the URL class

PR-URL: #10562
Fixes: #10554
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
  • Loading branch information...
1 parent d08463a commit 3195fb45ae977c7222210a1d28b695930016b693 @jasnell jasnell committed with evanlucas Jan 1, 2017
Showing with 29 additions and 14 deletions.
  1. +8 −14 lib/internal/url.js
  2. +21 −0 test/parallel/test-whatwg-url-tostringtag.js
View
@@ -221,6 +221,10 @@ class URL {
parse(this, input, base);
}
+ get [Symbol.toStringTag]() {
+ return this instanceof URL ? 'URL' : 'URLPrototype';
+ }
+
get [special]() {
return (this[context].flags & binding.URL_FLAGS_SPECIAL) !== 0;
}
@@ -640,15 +644,11 @@ class URLSearchParams {
// "associated url object"
this[context] = null;
+ }
- // Class string for an instance of URLSearchParams. This is different from
- // the class string of the prototype object (set below).
- Object.defineProperty(this, Symbol.toStringTag, {
- value: 'URLSearchParams',
- writable: false,
- enumerable: false,
- configurable: true
- });
+ get [Symbol.toStringTag]() {
+ return this instanceof URLSearchParams ?
+ 'URLSearchParams' : 'URLSearchParamsPrototype';
}
append(name, value) {
@@ -803,12 +803,6 @@ class URLSearchParams {
}
// https://heycam.github.io/webidl/#es-iterable-entries
URLSearchParams.prototype[Symbol.iterator] = URLSearchParams.prototype.entries;
-Object.defineProperty(URLSearchParams.prototype, Symbol.toStringTag, {
- value: 'URLSearchParamsPrototype',
- writable: false,
- enumerable: false,
- configurable: true
-});
// https://heycam.github.io/webidl/#dfn-default-iterator-object
function createSearchParamsIterator(target, kind) {
@@ -0,0 +1,21 @@
+'use strict';
+
+require('../common');
+const assert = require('assert');
+const URL = require('url').URL;
+const toString = Object.prototype.toString;
+
+const url = new URL('http://example.org');
+const sp = url.searchParams;
+
+const test = [
+ [toString.call(url), 'URL'],
+ [toString.call(Object.getPrototypeOf(url)), 'URLPrototype'],
+ [toString.call(sp), 'URLSearchParams'],
+ [toString.call(Object.getPrototypeOf(sp)), 'URLSearchParamsPrototype']
+];
+
+test.forEach((row) => {
+ assert.strictEqual(row[0], `[object ${row[1]}]`,
+ `${row[0]} !== [object ${row[1]}]`);
+});

0 comments on commit 3195fb4

Please sign in to comment.