如何在jQuery 11的IE11中添加Object.values pollyfill?

时间:2019-04-22 18:57:38

标签: javascript jquery

我正在使用vue / vuetify,并且我正在尝试使其在IE11中工作。运行它时,出现此错误

TypeError: Object doesn't support property or method 'values'

但是当我添加一个pollyfill

    if (!Object.values) {
        Object.prototype.values = function (obj) {
            return Object.keys(obj).map(function (e) {
                return obj[e];
            });
        };
    }

我是从jquery 3.4.0中获得的

Object.keys: argument is not an Object

因为它最终调用了上面的函数,但是没有将任何参数传递给它。从这里

    add = function( key, valueOrFunction ) {

        // If value is a function, invoke it and use its return value
        var value = isFunction( valueOrFunction ) ?
            valueOrFunction() :
            valueOrFunction;

        s[ s.length ] = encodeURIComponent( key ) + "=" +
            encodeURIComponent( value == null ? "" : value );
    };

它打电话

valueOrFunction() // which is the Object.values()

这是一个jsfiddle

https://jsfiddle.net/cn75e4xs/3/

在IE11中打开,然后查看“控制台”选项卡。我得到

Object.keys: argument is not an Object

因为调用该函数时没有传递参数,所以obj在pollyfill中变得未定义。

enter image description here

1 个答案:

答案 0 :(得分:0)

由于某些原因,您正在分配给Object.prototype.values。您应该改为分配给Object.values

Object.values = function (obj) {
//    ^ no .prototype
    return Object.keys(obj).map(function (e) {
        return obj[e];
    });
};

由于您向Object.prototype添加了一个没有making it non-enumerable的属性,所以jQuery代码中断了。