Объект не поддерживает это свойство или метод 'records' (polyfill не работает в ребре) - PullRequest
0 голосов
/ 30 октября 2018

У меня та же проблема, что и у этого Объект не поддерживает свойство или метод 'entry' , и я установил polyfill как один из первых сценариев, запущенных в моем приложении.

Это JS с ошибкой

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

Вот полифилл, который я пытаюсь

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 on edge, несмотря на то, что она определенно присутствует на странице?

1 Ответ

0 голосов
/ 30 октября 2018

Эти вопросы и ответы, на которые вы ссылались, в которых говорилось, что вы должны использовать полифилл Object.entries для предоставления метода entries в FormData экземплярах, абсолютно неверны. Полифилл, который вы указали для Object.entries, добавляет метод entries к объекту-конструктору Object: то есть вы можете безопасно использовать буквенное выражение Object.entries(something) для вызова метода entries для объекта Object , Object.entries - это другая функция, выполняющая операцию, отличную от метода entries, который существует в FormData экземплярах.

Вместо этого вам нужен полифил для Formdata.prototype.entries. Один вариант доступен на https://github.com/github/form-data-entries,, хотя он достигает своей цели, когда вы пишете formDataEntries(myForm) вместо new FormData(myform).entries(). Это , а не правильный полифилл (они называют его "ponyfill"), так как он не добавляет entries метод к FormData, а вместо этого предоставляет совершенно новую функцию, которая делает то же самое.

...