我遇到与此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之前
尽管肯定在页面上,但错误如何继续运行而不是边缘填充?
答案 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
方法,而是提供了一个全新的函数同一件事。