【问题标题】:How to add Object.values pollyfill in IE11 for jquery 3?如何在 IE11 中为 jquery 3 添加 Object.values polyfill?
【发布时间】:2019-09-11 22:55:00
【问题描述】:

我正在使用 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 中变得未定义。

【问题讨论】:

  • 请注意,虽然副本接受的答案使用与您类似的代码,但也有许多答案没有;你应该试试这些。
  • 我添加了一个 jsfiddle。我使用了接受答案中的代码,但问题是 jquery 正在调用它但没有传递任何参数。
  • 来自jQuery's Browser Support page(包括IE9+):“上述浏览器中jQuery的任何问题都应该报告为jQuery中的错误。”
  • 浏览器是运行在IE8模式还是什么的?

标签: javascript jquery


【解决方案1】:

出于某种原因,您正在分配给Object.prototype.values。你应该分配给Object.values

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

jQuery 代码损坏了,因为您在没有 making it non-enumerable 的情况下向 Object.prototype 添加了一个属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 2020-04-15
    • 1970-01-01
    相关资源
    最近更新 更多