对象不支持此属性或方法“输入”(polyfill在边缘中不起作用)

时间:2018-10-30 14:19:05

标签: javascript polyfills babel-polyfill

我遇到与此Object doesn't support property or method 'entries'相同的问题,并安装了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之前

尽管肯定在页面上,但错误如何继续运行而不是边缘填充?

1 个答案:

答案 0 :(得分:1)

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

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