diff --git a/.eslintrc.js b/.eslintrc.js index 627e7cebc21e..8ec76441b615 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -225,7 +225,7 @@ const base = { 'linebreak-style': [ERROR, 'unix'], // specify the maximum length of a line in your program 'max-len': [ERROR, { - code: 120, + code: 140, tabWidth: 2, ignoreRegExpLiterals: true, ignoreTemplateLiterals: true, diff --git a/packages/core-js-pure/override/internals/collection.js b/packages/core-js-pure/override/internals/collection.js index 29adcddf1bf9..f179f5c9b6b2 100644 --- a/packages/core-js-pure/override/internals/collection.js +++ b/packages/core-js-pure/override/internals/collection.js @@ -34,19 +34,21 @@ module.exports = function (CONSTRUCTOR_NAME, wrapper, common) { InternalMetadataModule.enable(); } else { Constructor = wrapper(function (target, iterable) { - setInternalState(anInstance(target, Constructor, CONSTRUCTOR_NAME), { + setInternalState(anInstance(target, Prototype), { type: CONSTRUCTOR_NAME, collection: new NativeConstructor() }); if (iterable != undefined) iterate(iterable, target[ADDER], { that: target, AS_ENTRIES: IS_MAP }); }); + var Prototype = Constructor.prototype; + var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME); forEach(['add', 'clear', 'delete', 'forEach', 'get', 'has', 'set', 'keys', 'values', 'entries'], function (KEY) { var IS_ADDER = KEY == 'add' || KEY == 'set'; if (KEY in NativePrototype && !(IS_WEAK && KEY == 'clear')) { - createNonEnumerableProperty(Constructor.prototype, KEY, function (a, b) { + createNonEnumerableProperty(Prototype, KEY, function (a, b) { var collection = getInternalState(this).collection; if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY == 'get' ? undefined : false; var result = collection[KEY](a === 0 ? 0 : a, b); @@ -55,7 +57,7 @@ module.exports = function (CONSTRUCTOR_NAME, wrapper, common) { } }); - IS_WEAK || defineProperty(Constructor.prototype, 'size', { + IS_WEAK || defineProperty(Prototype, 'size', { configurable: true, get: function () { return getInternalState(this).collection.size; diff --git a/packages/core-js-pure/override/internals/export.js b/packages/core-js-pure/override/internals/export.js index daeec99973d5..2ee37b088afa 100644 --- a/packages/core-js-pure/override/internals/export.js +++ b/packages/core-js-pure/override/internals/export.js @@ -12,7 +12,7 @@ var hasOwn = require('../internals/has-own-property'); var wrapConstructor = function (NativeConstructor) { var Wrapper = function (a, b, c) { - if (this instanceof NativeConstructor) { + if (this instanceof Wrapper) { switch (arguments.length) { case 0: return new NativeConstructor(); case 1: return new NativeConstructor(a); diff --git a/packages/core-js/es/instance/at.js b/packages/core-js/es/instance/at.js index d7b0994779d8..86ae5cf90918 100644 --- a/packages/core-js/es/instance/at.js +++ b/packages/core-js/es/instance/at.js @@ -1,13 +1,14 @@ -var arrayAt = require('../array/virtual/at'); -var stringAt = require('../string/virtual/at'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var arrayMethod = require('../array/virtual/at'); +var stringMethod = require('../string/virtual/at'); var ArrayPrototype = Array.prototype; var StringPrototype = String.prototype; module.exports = function (it) { var own = it.at; - if (it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.at)) return arrayAt; - if (typeof it == 'string' || it === StringPrototype || (it instanceof String && own === StringPrototype.at)) { - return stringAt; + if (it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.at)) return arrayMethod; + if (typeof it == 'string' || it === StringPrototype || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.at)) { + return stringMethod; } return own; }; diff --git a/packages/core-js/es/instance/bind.js b/packages/core-js/es/instance/bind.js index 11f932a264b3..4608f6075a6a 100644 --- a/packages/core-js/es/instance/bind.js +++ b/packages/core-js/es/instance/bind.js @@ -1,8 +1,9 @@ -var bind = require('../function/virtual/bind'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../function/virtual/bind'); var FunctionPrototype = Function.prototype; module.exports = function (it) { var own = it.bind; - return it === FunctionPrototype || (it instanceof Function && own === FunctionPrototype.bind) ? bind : own; + return it === FunctionPrototype || (isPrototypeOf(FunctionPrototype, it) && own === FunctionPrototype.bind) ? method : own; }; diff --git a/packages/core-js/es/instance/code-point-at.js b/packages/core-js/es/instance/code-point-at.js index 5c17638b8ba4..0a3baf8b8ab3 100644 --- a/packages/core-js/es/instance/code-point-at.js +++ b/packages/core-js/es/instance/code-point-at.js @@ -1,9 +1,10 @@ -var codePointAt = require('../string/virtual/code-point-at'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../string/virtual/code-point-at'); var StringPrototype = String.prototype; module.exports = function (it) { var own = it.codePointAt; return typeof it == 'string' || it === StringPrototype - || (it instanceof String && own === StringPrototype.codePointAt) ? codePointAt : own; + || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.codePointAt) ? method : own; }; diff --git a/packages/core-js/es/instance/concat.js b/packages/core-js/es/instance/concat.js index 87b74138d7cd..5926b62f2a08 100644 --- a/packages/core-js/es/instance/concat.js +++ b/packages/core-js/es/instance/concat.js @@ -1,8 +1,9 @@ -var concat = require('../array/virtual/concat'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/concat'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.concat; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.concat) ? concat : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.concat) ? method : own; }; diff --git a/packages/core-js/es/instance/copy-within.js b/packages/core-js/es/instance/copy-within.js index c59f52d375f8..e8f22c482e70 100644 --- a/packages/core-js/es/instance/copy-within.js +++ b/packages/core-js/es/instance/copy-within.js @@ -1,8 +1,9 @@ -var copyWithin = require('../array/virtual/copy-within'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/copy-within'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.copyWithin; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.copyWithin) ? copyWithin : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.copyWithin) ? method : own; }; diff --git a/packages/core-js/es/instance/ends-with.js b/packages/core-js/es/instance/ends-with.js index 34fb5e19140a..58e8225050a7 100644 --- a/packages/core-js/es/instance/ends-with.js +++ b/packages/core-js/es/instance/ends-with.js @@ -1,9 +1,10 @@ -var endsWith = require('../string/virtual/ends-with'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../string/virtual/ends-with'); var StringPrototype = String.prototype; module.exports = function (it) { var own = it.endsWith; return typeof it == 'string' || it === StringPrototype - || (it instanceof String && own === StringPrototype.endsWith) ? endsWith : own; + || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.endsWith) ? method : own; }; diff --git a/packages/core-js/es/instance/entries.js b/packages/core-js/es/instance/entries.js index 8aedc418cf2c..76b4c82fbbd6 100644 --- a/packages/core-js/es/instance/entries.js +++ b/packages/core-js/es/instance/entries.js @@ -1,8 +1,9 @@ -var entries = require('../array/virtual/entries'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/entries'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.entries; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.entries) ? entries : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.entries) ? method : own; }; diff --git a/packages/core-js/es/instance/every.js b/packages/core-js/es/instance/every.js index 1faaccbbe5e4..cf962ca25bcc 100644 --- a/packages/core-js/es/instance/every.js +++ b/packages/core-js/es/instance/every.js @@ -1,8 +1,9 @@ -var every = require('../array/virtual/every'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/every'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.every; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.every) ? every : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.every) ? method : own; }; diff --git a/packages/core-js/es/instance/fill.js b/packages/core-js/es/instance/fill.js index 5d0f22be57b8..ab12656da304 100644 --- a/packages/core-js/es/instance/fill.js +++ b/packages/core-js/es/instance/fill.js @@ -1,8 +1,9 @@ -var fill = require('../array/virtual/fill'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/fill'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.fill; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.fill) ? fill : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.fill) ? method : own; }; diff --git a/packages/core-js/es/instance/filter.js b/packages/core-js/es/instance/filter.js index 8ba32b66d276..faf482dae59b 100644 --- a/packages/core-js/es/instance/filter.js +++ b/packages/core-js/es/instance/filter.js @@ -1,8 +1,9 @@ -var filter = require('../array/virtual/filter'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/filter'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.filter; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.filter) ? filter : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.filter) ? method : own; }; diff --git a/packages/core-js/es/instance/find-index.js b/packages/core-js/es/instance/find-index.js index 27a058374594..bf67ebf2e9ea 100644 --- a/packages/core-js/es/instance/find-index.js +++ b/packages/core-js/es/instance/find-index.js @@ -1,8 +1,9 @@ -var findIndex = require('../array/virtual/find-index'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/find-index'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.findIndex; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.findIndex) ? findIndex : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.findIndex) ? method : own; }; diff --git a/packages/core-js/es/instance/find.js b/packages/core-js/es/instance/find.js index 70443c76b8a7..154040644613 100644 --- a/packages/core-js/es/instance/find.js +++ b/packages/core-js/es/instance/find.js @@ -1,8 +1,9 @@ -var find = require('../array/virtual/find'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/find'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.find; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.find) ? find : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.find) ? method : own; }; diff --git a/packages/core-js/es/instance/flags.js b/packages/core-js/es/instance/flags.js index f0b91148e604..1601f9e31de6 100644 --- a/packages/core-js/es/instance/flags.js +++ b/packages/core-js/es/instance/flags.js @@ -1,7 +1,8 @@ +var isPrototypeOf = require('../../internals/object-is-prototype-of'); var flags = require('../regexp/flags'); var RegExpPrototype = RegExp.prototype; module.exports = function (it) { - return (it === RegExpPrototype || it instanceof RegExp) && !('flags' in it) ? flags(it) : it.flags; + return (it === RegExpPrototype || isPrototypeOf(RegExpPrototype, it)) ? flags(it) : it.flags; }; diff --git a/packages/core-js/es/instance/flat-map.js b/packages/core-js/es/instance/flat-map.js index eca5a41ddf6a..7cc957fae7b8 100644 --- a/packages/core-js/es/instance/flat-map.js +++ b/packages/core-js/es/instance/flat-map.js @@ -1,8 +1,9 @@ -var flatMap = require('../array/virtual/flat-map'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/flat-map'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.flatMap; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.flatMap) ? flatMap : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.flatMap) ? method : own; }; diff --git a/packages/core-js/es/instance/flat.js b/packages/core-js/es/instance/flat.js index 186a7293871b..2baf13929fe3 100644 --- a/packages/core-js/es/instance/flat.js +++ b/packages/core-js/es/instance/flat.js @@ -1,8 +1,9 @@ -var flat = require('../array/virtual/flat'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/flat'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.flat; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.flat) ? flat : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.flat) ? method : own; }; diff --git a/packages/core-js/es/instance/for-each.js b/packages/core-js/es/instance/for-each.js index 3a2e6a91d1dd..7d1b51527e86 100644 --- a/packages/core-js/es/instance/for-each.js +++ b/packages/core-js/es/instance/for-each.js @@ -1,8 +1,9 @@ -var forEach = require('../array/virtual/for-each'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/for-each'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.forEach; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.forEach) ? forEach : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.forEach) ? method : own; }; diff --git a/packages/core-js/es/instance/includes.js b/packages/core-js/es/instance/includes.js index 369cee6a1e87..e99012578079 100644 --- a/packages/core-js/es/instance/includes.js +++ b/packages/core-js/es/instance/includes.js @@ -1,13 +1,14 @@ -var arrayIncludes = require('../array/virtual/includes'); -var stringIncludes = require('../string/virtual/includes'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var arrayMethod = require('../array/virtual/includes'); +var stringMethod = require('../string/virtual/includes'); var ArrayPrototype = Array.prototype; var StringPrototype = String.prototype; module.exports = function (it) { var own = it.includes; - if (it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.includes)) return arrayIncludes; - if (typeof it == 'string' || it === StringPrototype || (it instanceof String && own === StringPrototype.includes)) { - return stringIncludes; + if (it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.includes)) return arrayMethod; + if (typeof it == 'string' || it === StringPrototype || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.includes)) { + return stringMethod; } return own; }; diff --git a/packages/core-js/es/instance/index-of.js b/packages/core-js/es/instance/index-of.js index a5fa42a8cddd..9dc9d04e73df 100644 --- a/packages/core-js/es/instance/index-of.js +++ b/packages/core-js/es/instance/index-of.js @@ -1,8 +1,9 @@ -var indexOf = require('../array/virtual/index-of'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/index-of'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.indexOf; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.indexOf) ? indexOf : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.indexOf) ? method : own; }; diff --git a/packages/core-js/es/instance/keys.js b/packages/core-js/es/instance/keys.js index 0e2dca2ae2fe..c675d7681ee4 100644 --- a/packages/core-js/es/instance/keys.js +++ b/packages/core-js/es/instance/keys.js @@ -1,8 +1,9 @@ -var keys = require('../array/virtual/keys'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/keys'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.keys; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.keys) ? keys : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.keys) ? method : own; }; diff --git a/packages/core-js/es/instance/last-index-of.js b/packages/core-js/es/instance/last-index-of.js index 729bc658b492..26024017558c 100644 --- a/packages/core-js/es/instance/last-index-of.js +++ b/packages/core-js/es/instance/last-index-of.js @@ -1,8 +1,9 @@ -var lastIndexOf = require('../array/virtual/last-index-of'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/last-index-of'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.lastIndexOf; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.lastIndexOf) ? lastIndexOf : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.lastIndexOf) ? method : own; }; diff --git a/packages/core-js/es/instance/map.js b/packages/core-js/es/instance/map.js index 4d2d17f531c9..2a0aa96caf31 100644 --- a/packages/core-js/es/instance/map.js +++ b/packages/core-js/es/instance/map.js @@ -1,8 +1,9 @@ -var map = require('../array/virtual/map'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/map'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.map; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.map) ? map : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.map) ? method : own; }; diff --git a/packages/core-js/es/instance/match-all.js b/packages/core-js/es/instance/match-all.js index 2b70fcb30bb4..252856597151 100644 --- a/packages/core-js/es/instance/match-all.js +++ b/packages/core-js/es/instance/match-all.js @@ -1,9 +1,10 @@ -var matchAll = require('../string/virtual/match-all'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../string/virtual/match-all'); var StringPrototype = String.prototype; module.exports = function (it) { var own = it.matchAll; return typeof it == 'string' || it === StringPrototype - || (it instanceof String && own === StringPrototype.matchAll) ? matchAll : own; + || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.matchAll) ? method : own; }; diff --git a/packages/core-js/es/instance/pad-end.js b/packages/core-js/es/instance/pad-end.js index 6eb9f33e8e86..a70d911e4577 100644 --- a/packages/core-js/es/instance/pad-end.js +++ b/packages/core-js/es/instance/pad-end.js @@ -1,9 +1,10 @@ -var padEnd = require('../string/virtual/pad-end'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../string/virtual/pad-end'); var StringPrototype = String.prototype; module.exports = function (it) { var own = it.padEnd; return typeof it == 'string' || it === StringPrototype - || (it instanceof String && own === StringPrototype.padEnd) ? padEnd : own; + || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.padEnd) ? method : own; }; diff --git a/packages/core-js/es/instance/pad-start.js b/packages/core-js/es/instance/pad-start.js index 97eb4673f8cd..66ef0523a804 100644 --- a/packages/core-js/es/instance/pad-start.js +++ b/packages/core-js/es/instance/pad-start.js @@ -1,9 +1,10 @@ -var padStart = require('../string/virtual/pad-start'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../string/virtual/pad-start'); var StringPrototype = String.prototype; module.exports = function (it) { var own = it.padStart; return typeof it == 'string' || it === StringPrototype - || (it instanceof String && own === StringPrototype.padStart) ? padStart : own; + || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.padStart) ? method : own; }; diff --git a/packages/core-js/es/instance/reduce-right.js b/packages/core-js/es/instance/reduce-right.js index 6a8802f2d9ba..adb907b65802 100644 --- a/packages/core-js/es/instance/reduce-right.js +++ b/packages/core-js/es/instance/reduce-right.js @@ -1,8 +1,9 @@ -var reduceRight = require('../array/virtual/reduce-right'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/reduce-right'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.reduceRight; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.reduceRight) ? reduceRight : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.reduceRight) ? method : own; }; diff --git a/packages/core-js/es/instance/reduce.js b/packages/core-js/es/instance/reduce.js index efa46a933582..ff563403fc12 100644 --- a/packages/core-js/es/instance/reduce.js +++ b/packages/core-js/es/instance/reduce.js @@ -1,8 +1,9 @@ -var reduce = require('../array/virtual/reduce'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/reduce'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.reduce; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.reduce) ? reduce : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.reduce) ? method : own; }; diff --git a/packages/core-js/es/instance/repeat.js b/packages/core-js/es/instance/repeat.js index 45bf555efcb6..2571280a107f 100644 --- a/packages/core-js/es/instance/repeat.js +++ b/packages/core-js/es/instance/repeat.js @@ -1,9 +1,10 @@ -var repeat = require('../string/virtual/repeat'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../string/virtual/repeat'); var StringPrototype = String.prototype; module.exports = function (it) { var own = it.repeat; return typeof it == 'string' || it === StringPrototype - || (it instanceof String && own === StringPrototype.repeat) ? repeat : own; + || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.repeat) ? method : own; }; diff --git a/packages/core-js/es/instance/replace-all.js b/packages/core-js/es/instance/replace-all.js index 1e8641ac29f3..da897284c6cc 100644 --- a/packages/core-js/es/instance/replace-all.js +++ b/packages/core-js/es/instance/replace-all.js @@ -1,9 +1,10 @@ -var replaceAll = require('../string/virtual/replace-all'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../string/virtual/replace-all'); var StringPrototype = String.prototype; module.exports = function (it) { var own = it.replaceAll; return typeof it == 'string' || it === StringPrototype - || (it instanceof String && own === StringPrototype.replaceAll) ? replaceAll : own; + || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.replaceAll) ? method : own; }; diff --git a/packages/core-js/es/instance/reverse.js b/packages/core-js/es/instance/reverse.js index ca4bfeaf047f..e549334b382c 100644 --- a/packages/core-js/es/instance/reverse.js +++ b/packages/core-js/es/instance/reverse.js @@ -1,8 +1,9 @@ -var reverse = require('../array/virtual/reverse'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/reverse'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.reverse; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.reverse) ? reverse : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.reverse) ? method : own; }; diff --git a/packages/core-js/es/instance/slice.js b/packages/core-js/es/instance/slice.js index 03ef7a7d900a..105806ec2cf5 100644 --- a/packages/core-js/es/instance/slice.js +++ b/packages/core-js/es/instance/slice.js @@ -1,8 +1,9 @@ -var slice = require('../array/virtual/slice'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/slice'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.slice; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.slice) ? slice : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.slice) ? method : own; }; diff --git a/packages/core-js/es/instance/some.js b/packages/core-js/es/instance/some.js index 562c11ea459d..3b4a08509d45 100644 --- a/packages/core-js/es/instance/some.js +++ b/packages/core-js/es/instance/some.js @@ -1,8 +1,9 @@ -var some = require('../array/virtual/some'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/some'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.some; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.some) ? some : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.some) ? method : own; }; diff --git a/packages/core-js/es/instance/sort.js b/packages/core-js/es/instance/sort.js index 96edb8037ca5..68c2a046c291 100644 --- a/packages/core-js/es/instance/sort.js +++ b/packages/core-js/es/instance/sort.js @@ -1,8 +1,9 @@ -var sort = require('../array/virtual/sort'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/sort'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.sort; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.sort) ? sort : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.sort) ? method : own; }; diff --git a/packages/core-js/es/instance/splice.js b/packages/core-js/es/instance/splice.js index 5b907f4b3f49..d44435f0872b 100644 --- a/packages/core-js/es/instance/splice.js +++ b/packages/core-js/es/instance/splice.js @@ -1,8 +1,9 @@ -var splice = require('../array/virtual/splice'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/splice'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.splice; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.splice) ? splice : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.splice) ? method : own; }; diff --git a/packages/core-js/es/instance/starts-with.js b/packages/core-js/es/instance/starts-with.js index 283a42cafd4d..9f8b0810ed16 100644 --- a/packages/core-js/es/instance/starts-with.js +++ b/packages/core-js/es/instance/starts-with.js @@ -1,9 +1,10 @@ -var startsWith = require('../string/virtual/starts-with'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../string/virtual/starts-with'); var StringPrototype = String.prototype; module.exports = function (it) { var own = it.startsWith; return typeof it == 'string' || it === StringPrototype - || (it instanceof String && own === StringPrototype.startsWith) ? startsWith : own; + || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.startsWith) ? method : own; }; diff --git a/packages/core-js/es/instance/trim-end.js b/packages/core-js/es/instance/trim-end.js index 2e72c8d827c3..3275945be848 100644 --- a/packages/core-js/es/instance/trim-end.js +++ b/packages/core-js/es/instance/trim-end.js @@ -1,9 +1,10 @@ -var trimEnd = require('../string/virtual/trim-end'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../string/virtual/trim-end'); var StringPrototype = String.prototype; module.exports = function (it) { var own = it.trimEnd; return typeof it == 'string' || it === StringPrototype - || (it instanceof String && own === StringPrototype.trimEnd) ? trimEnd : own; + || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.trimEnd) ? method : own; }; diff --git a/packages/core-js/es/instance/trim-left.js b/packages/core-js/es/instance/trim-left.js index 611dc08c654d..e7808e2f6c45 100644 --- a/packages/core-js/es/instance/trim-left.js +++ b/packages/core-js/es/instance/trim-left.js @@ -1,9 +1,10 @@ -var trimLeft = require('../string/virtual/trim-left'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../string/virtual/trim-left'); var StringPrototype = String.prototype; module.exports = function (it) { var own = it.trimLeft; return typeof it == 'string' || it === StringPrototype - || (it instanceof String && own === StringPrototype.trimLeft) ? trimLeft : own; + || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.trimLeft) ? method : own; }; diff --git a/packages/core-js/es/instance/trim-right.js b/packages/core-js/es/instance/trim-right.js index 6f77524f87cf..fb03bae5f23e 100644 --- a/packages/core-js/es/instance/trim-right.js +++ b/packages/core-js/es/instance/trim-right.js @@ -1,9 +1,10 @@ -var trimRight = require('../string/virtual/trim-right'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../string/virtual/trim-right'); var StringPrototype = String.prototype; module.exports = function (it) { var own = it.trimRight; return typeof it == 'string' || it === StringPrototype - || (it instanceof String && own === StringPrototype.trimRight) ? trimRight : own; + || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.trimRight) ? method : own; }; diff --git a/packages/core-js/es/instance/trim-start.js b/packages/core-js/es/instance/trim-start.js index 37f40277b36d..77374edd01d8 100644 --- a/packages/core-js/es/instance/trim-start.js +++ b/packages/core-js/es/instance/trim-start.js @@ -1,9 +1,10 @@ -var trimStart = require('../string/virtual/trim-start'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../string/virtual/trim-start'); var StringPrototype = String.prototype; module.exports = function (it) { var own = it.trimStart; return typeof it == 'string' || it === StringPrototype - || (it instanceof String && own === StringPrototype.trimStart) ? trimStart : own; + || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.trimStart) ? method : own; }; diff --git a/packages/core-js/es/instance/trim.js b/packages/core-js/es/instance/trim.js index f534ae21235a..b79daa6daf95 100644 --- a/packages/core-js/es/instance/trim.js +++ b/packages/core-js/es/instance/trim.js @@ -1,9 +1,10 @@ -var trim = require('../string/virtual/trim'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../string/virtual/trim'); var StringPrototype = String.prototype; module.exports = function (it) { var own = it.trim; return typeof it == 'string' || it === StringPrototype - || (it instanceof String && own === StringPrototype.trim) ? trim : own; + || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.trim) ? method : own; }; diff --git a/packages/core-js/es/instance/values.js b/packages/core-js/es/instance/values.js index 52c76df2832c..0ea838540812 100644 --- a/packages/core-js/es/instance/values.js +++ b/packages/core-js/es/instance/values.js @@ -1,8 +1,9 @@ -var values = require('../array/virtual/values'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/values'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.values; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.values) ? values : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.values) ? method : own; }; diff --git a/packages/core-js/features/instance/at.js b/packages/core-js/features/instance/at.js index d7b0994779d8..86ae5cf90918 100644 --- a/packages/core-js/features/instance/at.js +++ b/packages/core-js/features/instance/at.js @@ -1,13 +1,14 @@ -var arrayAt = require('../array/virtual/at'); -var stringAt = require('../string/virtual/at'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var arrayMethod = require('../array/virtual/at'); +var stringMethod = require('../string/virtual/at'); var ArrayPrototype = Array.prototype; var StringPrototype = String.prototype; module.exports = function (it) { var own = it.at; - if (it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.at)) return arrayAt; - if (typeof it == 'string' || it === StringPrototype || (it instanceof String && own === StringPrototype.at)) { - return stringAt; + if (it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.at)) return arrayMethod; + if (typeof it == 'string' || it === StringPrototype || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.at)) { + return stringMethod; } return own; }; diff --git a/packages/core-js/features/instance/code-points.js b/packages/core-js/features/instance/code-points.js index 99a906fed62e..e0b910e9c586 100644 --- a/packages/core-js/features/instance/code-points.js +++ b/packages/core-js/features/instance/code-points.js @@ -1,9 +1,10 @@ -var codePoints = require('../string/virtual/code-points'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../string/virtual/code-points'); var StringPrototype = String.prototype; module.exports = function (it) { var own = it.codePoints; return typeof it == 'string' || it === StringPrototype - || (it instanceof String && own === StringPrototype.codePoints) ? codePoints : own; + || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.codePoints) ? method : own; }; diff --git a/packages/core-js/features/instance/filter-out.js b/packages/core-js/features/instance/filter-out.js index ab1ec1148320..126c9f70aa54 100644 --- a/packages/core-js/features/instance/filter-out.js +++ b/packages/core-js/features/instance/filter-out.js @@ -1,9 +1,10 @@ // TODO: Remove from `core-js@4` -var filterOut = require('../array/virtual/filter-out'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/filter-out'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.filterOut; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.filterOut) ? filterOut : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.filterOut) ? method : own; }; diff --git a/packages/core-js/features/instance/filter-reject.js b/packages/core-js/features/instance/filter-reject.js index acb0f38e853a..eb5b047b407d 100644 --- a/packages/core-js/features/instance/filter-reject.js +++ b/packages/core-js/features/instance/filter-reject.js @@ -1,8 +1,9 @@ -var filterReject = require('../array/virtual/filter-reject'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/filter-reject'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.filterReject; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.filterReject) ? filterReject : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.filterReject) ? method : own; }; diff --git a/packages/core-js/features/instance/find-last-index.js b/packages/core-js/features/instance/find-last-index.js index a20b5526ed6e..6d3a28bc0325 100644 --- a/packages/core-js/features/instance/find-last-index.js +++ b/packages/core-js/features/instance/find-last-index.js @@ -1,8 +1,9 @@ -var findLastIndex = require('../array/virtual/find-last-index'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/find-last-index'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.findLastIndex; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.findLastIndex) ? findLastIndex : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.findLastIndex) ? method : own; }; diff --git a/packages/core-js/features/instance/find-last.js b/packages/core-js/features/instance/find-last.js index bdf4b385d756..aa0474c287b2 100644 --- a/packages/core-js/features/instance/find-last.js +++ b/packages/core-js/features/instance/find-last.js @@ -1,8 +1,9 @@ -var findLast = require('../array/virtual/find-last'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/find-last'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.findLast; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.findLast) ? findLast : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.findLast) ? method : own; }; diff --git a/packages/core-js/features/instance/group-by.js b/packages/core-js/features/instance/group-by.js index 2482595563e4..8bfd5a9e1b5b 100644 --- a/packages/core-js/features/instance/group-by.js +++ b/packages/core-js/features/instance/group-by.js @@ -1,8 +1,9 @@ -var groupBy = require('../array/virtual/group-by'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/group-by'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.groupBy; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.groupBy) ? groupBy : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.groupBy) ? method : own; }; diff --git a/packages/core-js/features/instance/unique-by.js b/packages/core-js/features/instance/unique-by.js index e5de52d7a434..55835077fd31 100644 --- a/packages/core-js/features/instance/unique-by.js +++ b/packages/core-js/features/instance/unique-by.js @@ -1,8 +1,9 @@ -var uniqueBy = require('../array/virtual/unique-by'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/unique-by'); var ArrayPrototype = Array.prototype; module.exports = function (it) { var own = it.uniqueBy; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.uniqueBy) ? uniqueBy : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.uniqueBy) ? method : own; }; diff --git a/packages/core-js/internals/an-instance.js b/packages/core-js/internals/an-instance.js index fb3a9a6d65e8..d76536732dd9 100644 --- a/packages/core-js/internals/an-instance.js +++ b/packages/core-js/internals/an-instance.js @@ -1,8 +1,9 @@ var global = require('../internals/global'); +var isPrototypeOf = require('../internals/object-is-prototype-of'); var TypeError = global.TypeError; -module.exports = function (it, Constructor, name) { - if (it instanceof Constructor) return it; - throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation'); +module.exports = function (it, Prototype) { + if (isPrototypeOf(Prototype, it)) return it; + throw TypeError('Incorrect invocation'); }; diff --git a/packages/core-js/internals/array-buffer.js b/packages/core-js/internals/array-buffer.js index 5298ca6e343a..35ad67060b14 100644 --- a/packages/core-js/internals/array-buffer.js +++ b/packages/core-js/internals/array-buffer.js @@ -32,8 +32,9 @@ var WRONG_LENGTH = 'Wrong length'; var WRONG_INDEX = 'Wrong index'; var NativeArrayBuffer = global[ARRAY_BUFFER]; var $ArrayBuffer = NativeArrayBuffer; +var ArrayBufferPrototype = $ArrayBuffer && $ArrayBuffer[PROTOTYPE]; var $DataView = global[DATA_VIEW]; -var $DataViewPrototype = $DataView && $DataView[PROTOTYPE]; +var DataViewPrototype = $DataView && $DataView[PROTOTYPE]; var ObjectPrototype = Object.prototype; var Array = global.Array; var RangeError = global.RangeError; @@ -93,7 +94,7 @@ var set = function (view, count, index, conversion, value, isLittleEndian) { if (!NATIVE_ARRAY_BUFFER) { $ArrayBuffer = function ArrayBuffer(length) { - anInstance(this, $ArrayBuffer, ARRAY_BUFFER); + anInstance(this, ArrayBufferPrototype); var byteLength = toIndex(length); setInternalState(this, { bytes: fill(Array(byteLength), 0), @@ -102,9 +103,11 @@ if (!NATIVE_ARRAY_BUFFER) { if (!DESCRIPTORS) this.byteLength = byteLength; }; + ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE]; + $DataView = function DataView(buffer, byteOffset, byteLength) { - anInstance(this, $DataView, DATA_VIEW); - anInstance(buffer, $ArrayBuffer, DATA_VIEW); + anInstance(this, DataViewPrototype); + anInstance(buffer, ArrayBufferPrototype); var bufferLength = getInternalState(buffer).byteLength; var offset = toIntegerOrInfinity(byteOffset); if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset'); @@ -122,6 +125,8 @@ if (!NATIVE_ARRAY_BUFFER) { } }; + DataViewPrototype = $DataView[PROTOTYPE]; + if (DESCRIPTORS) { addGetter($ArrayBuffer, 'byteLength'); addGetter($DataView, 'buffer'); @@ -129,7 +134,7 @@ if (!NATIVE_ARRAY_BUFFER) { addGetter($DataView, 'byteOffset'); } - redefineAll($DataView[PROTOTYPE], { + redefineAll(DataViewPrototype, { getInt8: function getInt8(byteOffset) { return get(this, 1, byteOffset)[0] << 24 >> 24; }, @@ -196,31 +201,34 @@ if (!NATIVE_ARRAY_BUFFER) { })) { /* eslint-enable no-new -- required for testing */ $ArrayBuffer = function ArrayBuffer(length) { - anInstance(this, $ArrayBuffer); + anInstance(this, ArrayBufferPrototype); return new NativeArrayBuffer(toIndex(length)); }; - var ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE] = NativeArrayBuffer[PROTOTYPE]; + + $ArrayBuffer[PROTOTYPE] = ArrayBufferPrototype; + for (var keys = getOwnPropertyNames(NativeArrayBuffer), j = 0, key; keys.length > j;) { if (!((key = keys[j++]) in $ArrayBuffer)) { createNonEnumerableProperty($ArrayBuffer, key, NativeArrayBuffer[key]); } } + ArrayBufferPrototype.constructor = $ArrayBuffer; } else if (INCORRECT_ARRAY_BUFFER_NAME && CONFIGURABLE_FUNCTION_NAME) { createNonEnumerableProperty(NativeArrayBuffer, 'name', ARRAY_BUFFER); } // WebKit bug - the same parent prototype for typed arrays and data view - if (setPrototypeOf && getPrototypeOf($DataViewPrototype) !== ObjectPrototype) { - setPrototypeOf($DataViewPrototype, ObjectPrototype); + if (setPrototypeOf && getPrototypeOf(DataViewPrototype) !== ObjectPrototype) { + setPrototypeOf(DataViewPrototype, ObjectPrototype); } // iOS Safari 7.x bug var testView = new $DataView(new $ArrayBuffer(2)); - var $setInt8 = uncurryThis($DataViewPrototype.setInt8); + var $setInt8 = uncurryThis(DataViewPrototype.setInt8); testView.setInt8(0, 2147483648); testView.setInt8(1, 2147483649); - if (testView.getInt8(0) || !testView.getInt8(1)) redefineAll($DataViewPrototype, { + if (testView.getInt8(0) || !testView.getInt8(1)) redefineAll(DataViewPrototype, { setInt8: function setInt8(byteOffset, value) { $setInt8(this, byteOffset, value << 24 >> 24); }, diff --git a/packages/core-js/internals/collection-strong.js b/packages/core-js/internals/collection-strong.js index 2a44977a305c..0a2def6576d5 100644 --- a/packages/core-js/internals/collection-strong.js +++ b/packages/core-js/internals/collection-strong.js @@ -16,8 +16,8 @@ var internalStateGetterFor = InternalStateModule.getterFor; module.exports = { getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) { - var C = wrapper(function (that, iterable) { - anInstance(that, C, CONSTRUCTOR_NAME); + var Constructor = wrapper(function (that, iterable) { + anInstance(that, Prototype); setInternalState(that, { type: CONSTRUCTOR_NAME, index: create(null), @@ -29,6 +29,8 @@ module.exports = { if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP }); }); + var Prototype = Constructor.prototype; + var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME); var define = function (that, key, value) { @@ -69,7 +71,7 @@ module.exports = { } }; - redefineAll(C.prototype, { + redefineAll(Prototype, { // `{ Map, Set }.prototype.clear()` methods // https://tc39.es/ecma262/#sec-map.prototype.clear // https://tc39.es/ecma262/#sec-set.prototype.clear @@ -129,7 +131,7 @@ module.exports = { } }); - redefineAll(C.prototype, IS_MAP ? { + redefineAll(Prototype, IS_MAP ? { // `Map.prototype.get(key)` method // https://tc39.es/ecma262/#sec-map.prototype.get get: function get(key) { @@ -148,14 +150,14 @@ module.exports = { return define(this, value = value === 0 ? 0 : value, value); } }); - if (DESCRIPTORS) defineProperty(C.prototype, 'size', { + if (DESCRIPTORS) defineProperty(Prototype, 'size', { get: function () { return getInternalState(this).size; } }); - return C; + return Constructor; }, - setStrong: function (C, CONSTRUCTOR_NAME, IS_MAP) { + setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) { var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator'; var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME); var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME); @@ -168,7 +170,7 @@ module.exports = { // https://tc39.es/ecma262/#sec-set.prototype.keys // https://tc39.es/ecma262/#sec-set.prototype.values // https://tc39.es/ecma262/#sec-set.prototype-@@iterator - defineIterator(C, CONSTRUCTOR_NAME, function (iterated, kind) { + defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) { setInternalState(this, { type: ITERATOR_NAME, target: iterated, diff --git a/packages/core-js/internals/collection-weak.js b/packages/core-js/internals/collection-weak.js index d6948b385709..4d9c50ea8023 100644 --- a/packages/core-js/internals/collection-weak.js +++ b/packages/core-js/internals/collection-weak.js @@ -56,8 +56,8 @@ UncaughtFrozenStore.prototype = { module.exports = { getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) { - var C = wrapper(function (that, iterable) { - anInstance(that, C, CONSTRUCTOR_NAME); + var Constructor = wrapper(function (that, iterable) { + anInstance(that, Prototype); setInternalState(that, { type: CONSTRUCTOR_NAME, id: id++, @@ -66,6 +66,8 @@ module.exports = { if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP }); }); + var Prototype = Constructor.prototype; + var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME); var define = function (that, key, value) { @@ -76,7 +78,7 @@ module.exports = { return that; }; - redefineAll(C.prototype, { + redefineAll(Prototype, { // `{ WeakMap, WeakSet }.prototype.delete(key)` methods // https://tc39.es/ecma262/#sec-weakmap.prototype.delete // https://tc39.es/ecma262/#sec-weakset.prototype.delete @@ -99,7 +101,7 @@ module.exports = { } }); - redefineAll(C.prototype, IS_MAP ? { + redefineAll(Prototype, IS_MAP ? { // `WeakMap.prototype.get(key)` method // https://tc39.es/ecma262/#sec-weakmap.prototype.get get: function get(key) { @@ -123,6 +125,6 @@ module.exports = { } }); - return C; + return Constructor; } }; diff --git a/packages/core-js/internals/collection.js b/packages/core-js/internals/collection.js index 4b22b76ad8e6..f987f82f9547 100644 --- a/packages/core-js/internals/collection.js +++ b/packages/core-js/internals/collection.js @@ -73,7 +73,7 @@ module.exports = function (CONSTRUCTOR_NAME, wrapper, common) { if (!ACCEPT_ITERABLES) { Constructor = wrapper(function (dummy, iterable) { - anInstance(dummy, Constructor, CONSTRUCTOR_NAME); + anInstance(dummy, NativePrototype); var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor); if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP }); return that; diff --git a/packages/core-js/internals/is-symbol.js b/packages/core-js/internals/is-symbol.js index 7df20e062eea..dcf571e9a19c 100644 --- a/packages/core-js/internals/is-symbol.js +++ b/packages/core-js/internals/is-symbol.js @@ -1,6 +1,7 @@ var global = require('../internals/global'); -var isCallable = require('../internals/is-callable'); var getBuiltIn = require('../internals/get-built-in'); +var isCallable = require('../internals/is-callable'); +var isPrototypeOf = require('../internals/object-is-prototype-of'); var USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid'); var Object = global.Object; @@ -9,5 +10,5 @@ module.exports = USE_SYMBOL_AS_UID ? function (it) { return typeof it == 'symbol'; } : function (it) { var $Symbol = getBuiltIn('Symbol'); - return isCallable($Symbol) && Object(it) instanceof $Symbol; + return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it)); }; diff --git a/packages/core-js/internals/iterate.js b/packages/core-js/internals/iterate.js index 92ef1c230e8e..481654a8c93a 100644 --- a/packages/core-js/internals/iterate.js +++ b/packages/core-js/internals/iterate.js @@ -1,10 +1,11 @@ var global = require('../internals/global'); +var bind = require('../internals/function-bind-context'); var call = require('../internals/function-call'); var anObject = require('../internals/an-object'); var tryToString = require('../internals/try-to-string'); var isArrayIteratorMethod = require('../internals/is-array-iterator-method'); var lengthOfArrayLike = require('../internals/length-of-array-like'); -var bind = require('../internals/function-bind-context'); +var isPrototypeOf = require('../internals/object-is-prototype-of'); var getIterator = require('../internals/get-iterator'); var getIteratorMethod = require('../internals/get-iterator-method'); var iteratorClose = require('../internals/iterator-close'); @@ -16,6 +17,8 @@ var Result = function (stopped, result) { this.result = result; }; +var ResultPrototype = Result.prototype; + module.exports = function (iterable, unboundFunction, options) { var that = options && options.that; var AS_ENTRIES = !!(options && options.AS_ENTRIES); @@ -45,7 +48,7 @@ module.exports = function (iterable, unboundFunction, options) { if (isArrayIteratorMethod(iterFn)) { for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) { result = callFn(iterable[index]); - if (result && result instanceof Result) return result; + if (result && isPrototypeOf(ResultPrototype, result)) return result; } return new Result(false); } iterator = getIterator(iterable, iterFn); @@ -58,6 +61,6 @@ module.exports = function (iterable, unboundFunction, options) { } catch (error) { iteratorClose(iterator, 'throw', error); } - if (typeof result == 'object' && result && result instanceof Result) return result; + if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result; } return new Result(false); }; diff --git a/packages/core-js/internals/object-is-prototype-of.js b/packages/core-js/internals/object-is-prototype-of.js new file mode 100644 index 000000000000..e2a4a8d634f7 --- /dev/null +++ b/packages/core-js/internals/object-is-prototype-of.js @@ -0,0 +1,3 @@ +var uncurryThis = require('../internals/function-uncurry-this'); + +module.exports = uncurryThis({}.isPrototypeOf); diff --git a/packages/core-js/internals/typed-array-constructor.js b/packages/core-js/internals/typed-array-constructor.js index ba6058509cf8..c271b1a12a99 100644 --- a/packages/core-js/internals/typed-array-constructor.js +++ b/packages/core-js/internals/typed-array-constructor.js @@ -19,6 +19,7 @@ var classof = require('../internals/classof'); var isObject = require('../internals/is-object'); var isSymbol = require('../internals/is-symbol'); var create = require('../internals/object-create'); +var isPrototypeOf = require('../internals/object-is-prototype-of'); var setPrototypeOf = require('../internals/object-set-prototype-of'); var getOwnPropertyNames = require('../internals/object-get-own-property-names').f; var typedArrayFrom = require('../internals/typed-array-from'); @@ -36,6 +37,7 @@ var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; var round = Math.round; var RangeError = global.RangeError; var ArrayBuffer = ArrayBufferModule.ArrayBuffer; +var ArrayBufferPrototype = ArrayBuffer.prototype; var DataView = ArrayBufferModule.DataView; var NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS; var TYPED_ARRAY_CONSTRUCTOR = ArrayBufferViewCore.TYPED_ARRAY_CONSTRUCTOR; @@ -64,7 +66,7 @@ var addGetter = function (it, key) { var isArrayBuffer = function (it) { var klass; - return it instanceof ArrayBuffer || (klass = classof(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer'; + return isPrototypeOf(ArrayBufferPrototype, it) || (klass = classof(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer'; }; var isTypedArrayIndex = function (target, key) { @@ -149,7 +151,7 @@ if (DESCRIPTORS) { if (!NATIVE_ARRAY_BUFFER_VIEWS) { TypedArrayConstructor = wrapper(function (that, data, offset, $length) { - anInstance(that, TypedArrayConstructor, CONSTRUCTOR_NAME); + anInstance(that, TypedArrayConstructorPrototype); var index = 0; var byteOffset = 0; var buffer, byteLength, length; @@ -189,7 +191,7 @@ if (DESCRIPTORS) { TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = create(TypedArrayPrototype); } else if (TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS) { TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) { - anInstance(dummy, TypedArrayConstructor, CONSTRUCTOR_NAME); + anInstance(dummy, TypedArrayConstructorPrototype); return inheritIfRequired(function () { if (!isObject(data)) return new NativeTypedArrayConstructor(toIndex(data)); if (isArrayBuffer(data)) return $length !== undefined diff --git a/packages/core-js/modules/es.aggregate-error.js b/packages/core-js/modules/es.aggregate-error.js index 825cb62940fe..5910af862d26 100644 --- a/packages/core-js/modules/es.aggregate-error.js +++ b/packages/core-js/modules/es.aggregate-error.js @@ -1,6 +1,7 @@ 'use strict'; var $ = require('../internals/export'); var global = require('../internals/global'); +var isPrototypeOf = require('../internals/object-is-prototype-of'); var getPrototypeOf = require('../internals/object-get-prototype-of'); var setPrototypeOf = require('../internals/object-set-prototype-of'); var copyConstructorProperties = require('../internals/copy-constructor-properties'); @@ -17,7 +18,7 @@ var Error = global.Error; var push = [].push; var $AggregateError = function AggregateError(errors, message /* , options */) { - var that = this instanceof $AggregateError ? this : create($AggregateErrorPrototype); + var that = isPrototypeOf(AggregateErrorPrototype, this) ? this : create(AggregateErrorPrototype); var options = arguments.length > 2 ? arguments[2] : undefined; if (setPrototypeOf) { that = setPrototypeOf(new Error(undefined), getPrototypeOf(that)); @@ -34,7 +35,7 @@ var $AggregateError = function AggregateError(errors, message /* , options */) { if (setPrototypeOf) setPrototypeOf($AggregateError, Error); else copyConstructorProperties($AggregateError, Error); -var $AggregateErrorPrototype = $AggregateError.prototype = create(Error.prototype, { +var AggregateErrorPrototype = $AggregateError.prototype = create(Error.prototype, { constructor: createPropertyDescriptor(1, $AggregateError), message: createPropertyDescriptor(1, ''), name: createPropertyDescriptor(1, 'AggregateError') diff --git a/packages/core-js/modules/es.number.constructor.js b/packages/core-js/modules/es.number.constructor.js index c99c1067717e..07e67fcf6b9b 100644 --- a/packages/core-js/modules/es.number.constructor.js +++ b/packages/core-js/modules/es.number.constructor.js @@ -6,6 +6,7 @@ var isForced = require('../internals/is-forced'); var redefine = require('../internals/redefine'); var hasOwn = require('../internals/has-own-property'); var inheritIfRequired = require('../internals/inherit-if-required'); +var isPrototypeOf = require('../internals/object-is-prototype-of'); var isSymbol = require('../internals/is-symbol'); var toPrimitive = require('../internals/to-primitive'); var fails = require('../internals/fails'); @@ -66,7 +67,7 @@ if (isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumb var n = arguments.length < 1 ? 0 : NativeNumber(toNumeric(value)); var dummy = this; // check on 1..constructor(foo) case - return dummy instanceof NumberWrapper && fails(function () { thisNumberValue(dummy); }) + return isPrototypeOf(NumberPrototype, dummy) && fails(function () { thisNumberValue(dummy); }) ? inheritIfRequired(Object(n), dummy, NumberWrapper) : n; }; for (var keys = DESCRIPTORS ? getOwnPropertyNames(NativeNumber) : ( diff --git a/packages/core-js/modules/es.promise.js b/packages/core-js/modules/es.promise.js index 7e94cce4761a..7173a46e2911 100644 --- a/packages/core-js/modules/es.promise.js +++ b/packages/core-js/modules/es.promise.js @@ -39,7 +39,7 @@ var setInternalState = InternalStateModule.set; var getInternalPromiseState = InternalStateModule.getterFor(PROMISE); var NativePromisePrototype = NativePromise && NativePromise.prototype; var PromiseConstructor = NativePromise; -var PromiseConstructorPrototype = NativePromisePrototype; +var PromisePrototype = NativePromisePrototype; var TypeError = global.TypeError; var document = global.document; var process = global.process; @@ -67,7 +67,7 @@ var FORCED = isForced(PROMISE, function () { // We can't detect it synchronously, so just check versions if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true; // We need Promise#finally in the pure version for preventing prototype pollution - if (IS_PURE && !PromiseConstructorPrototype['finally']) return true; + if (IS_PURE && !PromisePrototype['finally']) return true; // We can't use @@species feature detection in V8 since it causes // deoptimization and performance degradation // https://github.com/zloirock/core-js/issues/679 @@ -236,7 +236,7 @@ var internalResolve = function (state, value, unwrap) { if (FORCED) { // 25.4.3.1 Promise(executor) PromiseConstructor = function Promise(executor) { - anInstance(this, PromiseConstructor, PROMISE); + anInstance(this, PromisePrototype); aCallable(executor); call(Internal, this); var state = getInternalState(this); @@ -246,7 +246,7 @@ if (FORCED) { internalReject(state, error); } }; - PromiseConstructorPrototype = PromiseConstructor.prototype; + PromisePrototype = PromiseConstructor.prototype; // eslint-disable-next-line no-unused-vars -- required for `.length` Internal = function Promise(executor) { setInternalState(this, { @@ -260,7 +260,7 @@ if (FORCED) { value: undefined }); }; - Internal.prototype = redefineAll(PromiseConstructorPrototype, { + Internal.prototype = redefineAll(PromisePrototype, { // `Promise.prototype.then` method // https://tc39.es/ecma262/#sec-promise.prototype.then then: function then(onFulfilled, onRejected) { @@ -308,7 +308,7 @@ if (FORCED) { }, { unsafe: true }); // makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then` - redefine(NativePromisePrototype, 'catch', PromiseConstructorPrototype['catch'], { unsafe: true }); + redefine(NativePromisePrototype, 'catch', PromisePrototype['catch'], { unsafe: true }); } // make `.constructor === Promise` work for native promise-based APIs @@ -318,7 +318,7 @@ if (FORCED) { // make `instanceof Promise` work for native promise-based APIs if (setPrototypeOf) { - setPrototypeOf(NativePromisePrototype, PromiseConstructorPrototype); + setPrototypeOf(NativePromisePrototype, PromisePrototype); } } } diff --git a/packages/core-js/modules/es.regexp.constructor.js b/packages/core-js/modules/es.regexp.constructor.js index 86c8b77b5636..cafdfaf987d4 100644 --- a/packages/core-js/modules/es.regexp.constructor.js +++ b/packages/core-js/modules/es.regexp.constructor.js @@ -6,6 +6,7 @@ var inheritIfRequired = require('../internals/inherit-if-required'); var createNonEnumerableProperty = require('../internals/create-non-enumerable-property'); var defineProperty = require('../internals/object-define-property').f; var getOwnPropertyNames = require('../internals/object-get-own-property-names').f; +var isPrototypeOf = require('../internals/object-is-prototype-of'); var isRegExp = require('../internals/is-regexp'); var toString = require('../internals/to-string'); var regExpFlags = require('../internals/regexp-flags'); @@ -118,7 +119,7 @@ var handleNCG = function (string) { // https://tc39.es/ecma262/#sec-regexp-constructor if (isForced('RegExp', BASE_FORCED)) { var RegExpWrapper = function RegExp(pattern, flags) { - var thisIsRegExp = this instanceof RegExpWrapper; + var thisIsRegExp = isPrototypeOf(RegExpPrototype, this); var patternIsRegExp = isRegExp(pattern); var flagsAreUndefined = flags === undefined; var groups = []; @@ -129,7 +130,7 @@ if (isForced('RegExp', BASE_FORCED)) { return pattern; } - if (patternIsRegExp || pattern instanceof RegExpWrapper) { + if (patternIsRegExp || isPrototypeOf(RegExpPrototype, pattern)) { pattern = pattern.source; if (flagsAreUndefined) flags = 'flags' in rawPattern ? rawPattern.flags : getFlags(rawPattern); } diff --git a/packages/core-js/modules/es.regexp.to-string.js b/packages/core-js/modules/es.regexp.to-string.js index 719d17944107..e4f3b001ade8 100644 --- a/packages/core-js/modules/es.regexp.to-string.js +++ b/packages/core-js/modules/es.regexp.to-string.js @@ -3,6 +3,7 @@ var uncurryThis = require('../internals/function-uncurry-this'); var PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER; var redefine = require('../internals/redefine'); var anObject = require('../internals/an-object'); +var isPrototypeOf = require('../internals/object-is-prototype-of'); var $toString = require('../internals/to-string'); var fails = require('../internals/fails'); var regExpFlags = require('../internals/regexp-flags'); @@ -23,7 +24,7 @@ if (NOT_GENERIC || INCORRECT_NAME) { var R = anObject(this); var p = $toString(R.source); var rf = R.flags; - var f = $toString(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? getFlags(R) : rf); + var f = $toString(rf === undefined && isPrototypeOf(RegExpPrototype, R) && !('flags' in RegExpPrototype) ? getFlags(R) : rf); return '/' + p + '/' + f; }, { unsafe: true }); } diff --git a/packages/core-js/modules/es.string.match-all.js b/packages/core-js/modules/es.string.match-all.js index c41e249d99b3..e5762782e469 100644 --- a/packages/core-js/modules/es.string.match-all.js +++ b/packages/core-js/modules/es.string.match-all.js @@ -10,6 +10,7 @@ var toLength = require('../internals/to-length'); var toString = require('../internals/to-string'); var anObject = require('../internals/an-object'); var classof = require('../internals/classof-raw'); +var isPrototypeOf = require('../internals/object-is-prototype-of'); var isRegExp = require('../internals/is-regexp'); var regExpFlags = require('../internals/regexp-flags'); var getMethod = require('../internals/get-method'); @@ -37,7 +38,6 @@ var WORKS_WITH_NON_GLOBAL_REGEX = !!un$MatchAll && !fails(function () { un$MatchAll('a', /./); }); -// eslint-disable-next-line max-len -- ignore var $RegExpStringIterator = createIteratorConstructor(function RegExpStringIterator(regexp, string, $global, fullUnicode) { setInternalState(this, { type: REGEXP_STRING_ITERATOR, @@ -68,7 +68,7 @@ var $matchAll = function (string) { var C, flagsValue, flags, matcher, $global, fullUnicode; C = speciesConstructor(R, RegExp); flagsValue = R.flags; - if (flagsValue === undefined && R instanceof RegExp && !('flags' in RegExpPrototype)) { + if (flagsValue === undefined && isPrototypeOf(RegExpPrototype, R) && !('flags' in RegExpPrototype)) { flagsValue = getFlags(R); } flags = flagsValue === undefined ? '' : toString(flagsValue); diff --git a/packages/core-js/modules/es.symbol.description.js b/packages/core-js/modules/es.symbol.description.js index a31e0642cdea..5493dbf1cdb7 100644 --- a/packages/core-js/modules/es.symbol.description.js +++ b/packages/core-js/modules/es.symbol.description.js @@ -7,6 +7,7 @@ var global = require('../internals/global'); var uncurryThis = require('../internals/function-uncurry-this'); var hasOwn = require('../internals/has-own-property'); var isCallable = require('../internals/is-callable'); +var isPrototypeOf = require('../internals/object-is-prototype-of'); var toString = require('../internals/to-string'); var defineProperty = require('../internals/object-define-property').f; var copyConstructorProperties = require('../internals/copy-constructor-properties'); @@ -21,7 +22,7 @@ if (DESCRIPTORS && isCallable(NativeSymbol) && (!('description' in NativeSymbol. // wrap Symbol constructor for correct work with undefined description var SymbolWrapper = function Symbol() { var description = arguments.length < 1 || arguments[0] === undefined ? undefined : toString(arguments[0]); - var result = this instanceof SymbolWrapper + var result = isPrototypeOf(SymbolPrototype, this) ? new NativeSymbol(description) // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)' : description === undefined ? NativeSymbol() : NativeSymbol(description); @@ -29,17 +30,17 @@ if (DESCRIPTORS && isCallable(NativeSymbol) && (!('description' in NativeSymbol. return result; }; copyConstructorProperties(SymbolWrapper, NativeSymbol); - var symbolPrototype = SymbolWrapper.prototype = NativeSymbol.prototype; - symbolPrototype.constructor = SymbolWrapper; + var SymbolPrototype = SymbolWrapper.prototype = NativeSymbol.prototype; + SymbolPrototype.constructor = SymbolWrapper; var NATIVE_SYMBOL = String(NativeSymbol('test')) == 'Symbol(test)'; - var symbolToString = uncurryThis(symbolPrototype.toString); - var symbolValueOf = uncurryThis(symbolPrototype.valueOf); + var symbolToString = uncurryThis(SymbolPrototype.toString); + var symbolValueOf = uncurryThis(SymbolPrototype.valueOf); var regexp = /^Symbol\((.*)\)[^)]+$/; var replace = uncurryThis(''.replace); var stringSlice = uncurryThis(''.slice); - defineProperty(symbolPrototype, 'description', { + defineProperty(SymbolPrototype, 'description', { configurable: true, get: function description() { var symbol = symbolValueOf(this); diff --git a/packages/core-js/modules/es.symbol.js b/packages/core-js/modules/es.symbol.js index bfe735bd6b0c..2f0776c659e3 100644 --- a/packages/core-js/modules/es.symbol.js +++ b/packages/core-js/modules/es.symbol.js @@ -13,6 +13,7 @@ var hasOwn = require('../internals/has-own-property'); var isArray = require('../internals/is-array'); var isCallable = require('../internals/is-callable'); var isObject = require('../internals/is-object'); +var isPrototypeOf = require('../internals/object-is-prototype-of'); var isSymbol = require('../internals/is-symbol'); var anObject = require('../internals/an-object'); var toObject = require('../internals/to-object'); @@ -51,6 +52,7 @@ var getInternalState = InternalStateModule.getterFor(SYMBOL); var ObjectPrototype = Object[PROTOTYPE]; var $Symbol = global.Symbol; +var SymbolPrototype = $Symbol && $Symbol[PROTOTYPE]; var TypeError = global.TypeError; var QObject = global.QObject; var $stringify = getBuiltIn('JSON', 'stringify'); @@ -84,7 +86,7 @@ var setSymbolDescriptor = DESCRIPTORS && fails(function () { } : nativeDefineProperty; var wrap = function (tag, description) { - var symbol = AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE]); + var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype); setInternalState(symbol, { type: SYMBOL, tag: tag, @@ -168,7 +170,7 @@ var $getOwnPropertySymbols = function getOwnPropertySymbols(O) { // https://tc39.es/ecma262/#sec-symbol-constructor if (!NATIVE_SYMBOL) { $Symbol = function Symbol() { - if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor'); + if (isPrototypeOf(SymbolPrototype, this)) throw TypeError('Symbol is not a constructor'); var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]); var tag = uid(description); var setter = function (value) { @@ -180,7 +182,9 @@ if (!NATIVE_SYMBOL) { return wrap(tag, description); }; - redefine($Symbol[PROTOTYPE], 'toString', function toString() { + SymbolPrototype = $Symbol[PROTOTYPE]; + + redefine(SymbolPrototype, 'toString', function toString() { return getInternalState(this).tag; }); @@ -200,7 +204,7 @@ if (!NATIVE_SYMBOL) { if (DESCRIPTORS) { // https://github.com/tc39/proposal-Symbol-description - nativeDefineProperty($Symbol[PROTOTYPE], 'description', { + nativeDefineProperty(SymbolPrototype, 'description', { configurable: true, get: function description() { return getInternalState(this).description; @@ -304,10 +308,10 @@ if ($stringify) { // `Symbol.prototype[@@toPrimitive]` method // https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive -if (!$Symbol[PROTOTYPE][TO_PRIMITIVE]) { - var valueOf = $Symbol[PROTOTYPE].valueOf; +if (!SymbolPrototype[TO_PRIMITIVE]) { + var valueOf = SymbolPrototype.valueOf; // eslint-disable-next-line no-unused-vars -- required for .length - redefine($Symbol[PROTOTYPE], TO_PRIMITIVE, function (hint) { + redefine(SymbolPrototype, TO_PRIMITIVE, function (hint) { // TODO: improve hint logic return call(valueOf, this); }); diff --git a/packages/core-js/modules/esnext.async-iterator.constructor.js b/packages/core-js/modules/esnext.async-iterator.constructor.js index c27d9813017e..e4b473b0b97f 100644 --- a/packages/core-js/modules/esnext.async-iterator.constructor.js +++ b/packages/core-js/modules/esnext.async-iterator.constructor.js @@ -11,7 +11,7 @@ var IS_PURE = require('../internals/is-pure'); var TO_STRING_TAG = wellKnownSymbol('toStringTag'); var AsyncIteratorConstructor = function AsyncIterator() { - anInstance(this, AsyncIteratorConstructor); + anInstance(this, AsyncIteratorPrototype); }; AsyncIteratorConstructor.prototype = AsyncIteratorPrototype; diff --git a/packages/core-js/modules/esnext.iterator.constructor.js b/packages/core-js/modules/esnext.iterator.constructor.js index 89ca2a42c8db..d12b1d63f60c 100644 --- a/packages/core-js/modules/esnext.iterator.constructor.js +++ b/packages/core-js/modules/esnext.iterator.constructor.js @@ -23,7 +23,7 @@ var FORCED = IS_PURE || !fails(function () { NativeIterator({}); }); var IteratorConstructor = function Iterator() { - anInstance(this, IteratorConstructor); + anInstance(this, IteratorPrototype); }; if (!hasOwn(IteratorPrototype, TO_STRING_TAG)) { diff --git a/packages/core-js/modules/esnext.observable.js b/packages/core-js/modules/esnext.observable.js index 00a64a9181d5..f3bff30fa17c 100644 --- a/packages/core-js/modules/esnext.observable.js +++ b/packages/core-js/modules/esnext.observable.js @@ -150,11 +150,13 @@ if (DESCRIPTORS) defineProperty(SubscriptionObserver.prototype, 'closed', { }); var $Observable = function Observable(subscriber) { - anInstance(this, $Observable, 'Observable'); + anInstance(this, ObservablePrototype); setInternalState(this, { subscriber: aCallable(subscriber) }); }; -redefineAll($Observable.prototype, { +var ObservablePrototype = $Observable.prototype; + +redefineAll(ObservablePrototype, { subscribe: function subscribe(observer) { var length = arguments.length; return new Subscription(isCallable(observer) ? { @@ -199,7 +201,7 @@ redefineAll($Observable, { } }); -redefine($Observable.prototype, OBSERVABLE, function () { return this; }); +redefine(ObservablePrototype, OBSERVABLE, function () { return this; }); $({ global: true }, { Observable: $Observable diff --git a/packages/core-js/modules/esnext.typed-array.from-async.js b/packages/core-js/modules/esnext.typed-array.from-async.js index 063b49c96064..17690e748f24 100644 --- a/packages/core-js/modules/esnext.typed-array.from-async.js +++ b/packages/core-js/modules/esnext.typed-array.from-async.js @@ -11,7 +11,6 @@ var exportTypedArrayStaticMethod = ArrayBufferViewCore.exportTypedArrayStaticMet // `%TypedArray%.fromAsync` method // https://github.com/tc39/proposal-array-from-async -// eslint-disable-next-line -- required for .length exportTypedArrayStaticMethod('fromAsync', function fromAsync(asyncItems /* , mapfn = undefined, thisArg = undefined */) { var C = this; var argumentsLength = arguments.length; diff --git a/packages/core-js/modules/web.url-search-params.js b/packages/core-js/modules/web.url-search-params.js index de495fcb51a9..d739db26b8b5 100644 --- a/packages/core-js/modules/web.url-search-params.js +++ b/packages/core-js/modules/web.url-search-params.js @@ -145,7 +145,7 @@ var URLSearchParamsIterator = createIteratorConstructor(function Iterator(params // `URLSearchParams` constructor // https://url.spec.whatwg.org/#interface-urlsearchparams var URLSearchParamsConstructor = function URLSearchParams(/* init */) { - anInstance(this, URLSearchParamsConstructor, URL_SEARCH_PARAMS); + anInstance(this, URLSearchParamsPrototype); var init = arguments.length > 0 ? arguments[0] : undefined; var that = this; var entries = []; @@ -358,7 +358,7 @@ if (!USE_NATIVE_URL && isCallable(Headers)) { if (isCallable(N$Request)) { var RequestConstructor = function Request(input /* , init */) { - anInstance(this, RequestConstructor, 'Request'); + anInstance(this, RequestPrototype); return new N$Request(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {}); }; diff --git a/packages/core-js/modules/web.url.js b/packages/core-js/modules/web.url.js index 2b266a712ab4..8fee67c7d558 100644 --- a/packages/core-js/modules/web.url.js +++ b/packages/core-js/modules/web.url.js @@ -753,14 +753,15 @@ var parseURL = function (url, input, stateOverride, base) { // `URL` constructor // https://url.spec.whatwg.org/#url-class var URLConstructor = function URL(url /* , base */) { - var that = anInstance(this, URLConstructor, 'URL'); + var that = anInstance(this, URLPrototype); var base = arguments.length > 1 ? arguments[1] : undefined; var urlString = $toString(url); var state = setInternalState(that, { type: 'URL' }); var baseState, failure; if (base !== undefined) { - if (base instanceof URLConstructor) baseState = getInternalURLState(base); - else { + try { + baseState = getInternalURLState(base); + } catch (error) { failure = parseURL(baseState = {}, $toString(base)); if (failure) throw TypeError(failure); } diff --git a/packages/core-js/stable/instance/entries.js b/packages/core-js/stable/instance/entries.js index 4a80ff170ad7..be33e5d54733 100644 --- a/packages/core-js/stable/instance/entries.js +++ b/packages/core-js/stable/instance/entries.js @@ -1,6 +1,9 @@ require('../../modules/web.dom-collections.iterator'); -var entries = require('../array/virtual/entries'); var classof = require('../../internals/classof'); +var hasOwn = require('../../internals/has-own-property'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/entries'); + var ArrayPrototype = Array.prototype; var DOMIterables = { @@ -10,7 +13,6 @@ var DOMIterables = { module.exports = function (it) { var own = it.entries; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.entries) - // eslint-disable-next-line no-prototype-builtins -- safe - || DOMIterables.hasOwnProperty(classof(it)) ? entries : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.entries) + || hasOwn(DOMIterables, classof(it)) ? method : own; }; diff --git a/packages/core-js/stable/instance/for-each.js b/packages/core-js/stable/instance/for-each.js index 9dd5f50bf9fe..8ac1869efdd4 100644 --- a/packages/core-js/stable/instance/for-each.js +++ b/packages/core-js/stable/instance/for-each.js @@ -1,6 +1,9 @@ require('../../modules/web.dom-collections.iterator'); -var forEach = require('../array/virtual/for-each'); var classof = require('../../internals/classof'); +var hasOwn = require('../../internals/has-own-property'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/for-each'); + var ArrayPrototype = Array.prototype; var DOMIterables = { @@ -10,7 +13,6 @@ var DOMIterables = { module.exports = function (it) { var own = it.forEach; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.forEach) - // eslint-disable-next-line no-prototype-builtins -- safe - || DOMIterables.hasOwnProperty(classof(it)) ? forEach : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.forEach) + || hasOwn(DOMIterables, classof(it)) ? method : own; }; diff --git a/packages/core-js/stable/instance/keys.js b/packages/core-js/stable/instance/keys.js index 2a15e2b42b7d..4349a80f7fd6 100644 --- a/packages/core-js/stable/instance/keys.js +++ b/packages/core-js/stable/instance/keys.js @@ -1,6 +1,9 @@ require('../../modules/web.dom-collections.iterator'); -var keys = require('../array/virtual/keys'); var classof = require('../../internals/classof'); +var hasOwn = require('../../internals/has-own-property'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/keys'); + var ArrayPrototype = Array.prototype; var DOMIterables = { @@ -10,7 +13,6 @@ var DOMIterables = { module.exports = function (it) { var own = it.keys; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.keys) - // eslint-disable-next-line no-prototype-builtins -- safe - || DOMIterables.hasOwnProperty(classof(it)) ? keys : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.keys) + || hasOwn(DOMIterables, classof(it)) ? method : own; }; diff --git a/packages/core-js/stable/instance/values.js b/packages/core-js/stable/instance/values.js index 9dde23c98b8d..4b5f8505af3f 100644 --- a/packages/core-js/stable/instance/values.js +++ b/packages/core-js/stable/instance/values.js @@ -1,6 +1,9 @@ require('../../modules/web.dom-collections.iterator'); -var values = require('../array/virtual/values'); var classof = require('../../internals/classof'); +var hasOwn = require('../../internals/has-own-property'); +var isPrototypeOf = require('../../internals/object-is-prototype-of'); +var method = require('../array/virtual/values'); + var ArrayPrototype = Array.prototype; var DOMIterables = { @@ -10,7 +13,6 @@ var DOMIterables = { module.exports = function (it) { var own = it.values; - return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.values) - // eslint-disable-next-line no-prototype-builtins -- safe - || DOMIterables.hasOwnProperty(classof(it)) ? values : own; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.values) + || hasOwn(DOMIterables, classof(it)) ? method : own; };