Метод, добавленный в Object.prototype, повторяется бесконечное количество раз - PullRequest
2 голосов
/ 08 марта 2019

Я возился с консолью браузера, чтобы улучшить свои навыки работы с JavaScript.

Когда я попытался добавить метод в Object.prototype, который возвращает его экземпляр как json, произошло нечто странное:

В самом конце метода он возвращается к циклу for-in и выполняет его снова.Снова и снова ...

Он ничего не возвращает и просто продолжает перепрыгивать и повторять.

Код:

Object.prototype.toJSON = function() {
  var tempObj = {}; 
  for (let key in this) {
    if (this.hasOwnProperty(key)) { 
      let value = this[key];
      tempObj[key] = value;
    }
  }
  return JSON.stringify(tempObj); 
}

Я знаю, что вы не должныдобавить методы в Object.prototype.(Если я ошибаюсь, поправьте меня)

Это только для целей обучения.

Не могли бы вы объяснить мне, почему этот метод ведет себя так, как он?

Я не хочу знать, как это будет работать, но почему это не работает.:)

Большое спасибо!

1 Ответ

1 голос
/ 08 марта 2019

Поскольку JSON.stringify() проверяет, есть ли у объекта метод toJSON, он будет вызывать toJSON, если он есть.

Вы заменяете источник toJSON на свой, а в вашем toJSON он называется JSON.stringify(), поэтому там создается цикл вызова.

проверьте это: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#Description

...