heyujie
2021-05-20 6ebdefb4a5b2be82a8c452c0bb4624f3d85a17b7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
"use strict";
 
var d            = require("d")
  , NativeSymbol = require("ext/global-this").Symbol;
 
module.exports = function (SymbolPolyfill) {
    return Object.defineProperties(SymbolPolyfill, {
        // To ensure proper interoperability with other native functions (e.g. Array.from)
        // fallback to eventual native implementation of given symbol
        hasInstance: d(
            "", (NativeSymbol && NativeSymbol.hasInstance) || SymbolPolyfill("hasInstance")
        ),
        isConcatSpreadable: d(
            "",
            (NativeSymbol && NativeSymbol.isConcatSpreadable) ||
                SymbolPolyfill("isConcatSpreadable")
        ),
        iterator: d("", (NativeSymbol && NativeSymbol.iterator) || SymbolPolyfill("iterator")),
        match: d("", (NativeSymbol && NativeSymbol.match) || SymbolPolyfill("match")),
        replace: d("", (NativeSymbol && NativeSymbol.replace) || SymbolPolyfill("replace")),
        search: d("", (NativeSymbol && NativeSymbol.search) || SymbolPolyfill("search")),
        species: d("", (NativeSymbol && NativeSymbol.species) || SymbolPolyfill("species")),
        split: d("", (NativeSymbol && NativeSymbol.split) || SymbolPolyfill("split")),
        toPrimitive: d(
            "", (NativeSymbol && NativeSymbol.toPrimitive) || SymbolPolyfill("toPrimitive")
        ),
        toStringTag: d(
            "", (NativeSymbol && NativeSymbol.toStringTag) || SymbolPolyfill("toStringTag")
        ),
        unscopables: d(
            "", (NativeSymbol && NativeSymbol.unscopables) || SymbolPolyfill("unscopables")
        )
    });
};