首页 > 解决方案 > 对象不支持此属性或方法“条目”(polyfill 在边缘不起作用)

问题描述

我有同样的问题,因为这个对象不支持属性或方法“条目”,我安装了 polyfill 作为在我的应用程序上运行的第一个脚本之一。

这是有错误的JS

const formdata = new FormData(form);
for (var value of formdata.entries()) {
   console.log(value); 
}

这是我正在尝试的polyfill

if (!Object.entries) { 
    //this does not run on Edge. So Object.entries must exist
    Object.entries = function( obj ){
        var ownProps = Object.keys( obj ),
            i = ownProps.length,
            resArray = new Array(i); // preallocate the Array
        while (i--)
          resArray[i] = [ownProps[i], obj[ownProps[i]]];

        return resArray;
    };
}

上面的脚本不在 Edge 上运行。所以Object.entries必须存在。所以我尝试了以下方法。

Object.entries = function( obj ){
    var ownProps = Object.keys( obj ),
        i = ownProps.length,
        resArray = new Array(i); // preallocate the Array
    while (i--)
      resArray[i] = [ownProps[i], obj[ownProps[i]]];

    return resArray;
};

现在我确定脚本在页面上。但是当我使用Object.entries错误出现在使用 polyfill 之前

尽管它肯定在页面上,但为什么错误会运行而不是边缘的 polyfill?

标签: javascriptpolyfillsbabel-polyfill

解决方案


您链接到的这个 Q&A 告诉您使用Object.entriespolyfillentries在实例上提供方法FormData,这是绝对不正确的。您提供的 polyfill向构造函数对象Object.entries添加了一个entries方法Object:也就是说,您可以安全地使用文字表达式Object.entries(something)来调用entries对象上的方法ObjectObject.entries是一个不同的函数,并且与实例entries上存在的方法执行不同的操作。FormData

相反,您需要一个用于Formdata.prototype.entries. https://github.com/github/form-data-entries提供了一个选项,尽管它通过让您编写formDataEntries(myForm)而不是new FormData(myform).entries(). 这不是一个合适的 polyfill(他们称其为“ponyfill”),因为它没有添加entries方法,FormData而是提供了一个全新的函数来做同样的事情。


推荐阅读