Можно ли изменить, но не заменить прототип метода? - PullRequest
0 голосов
/ 24 сентября 2018

Допустим, у меня есть метод Object.getNumber (), и я хочу внести небольшое изменение в результаты этого метода, например добавить 1 к результату, и нет, я не могу получить доступ к коду этого метода.

Есть ли способ сделать это с его прототипом?Мне нужно было бы получить доступ к методу в вызове defineProperty, я полагаю.

Object.defineProperty(Object.prototype, 'getNumber',{ get: function () { ... } });

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Вы всегда можете заменить оригинальный метод в прототипе, но сохранить оригинальный где-нибудь в локальной переменной.Как то так:

Object.prototype.getNumber = (function() {
    let originalFn = Object.prototype.getNumber;

    return function() {
        let originalResult = originalFn.apply(this, arguments);

        return originalResult + 1;
    };
})();
0 голосов
/ 24 сентября 2018

Метод - это просто функция, которую вы можете передать, поэтому вы можете просто применять эту функцию за другой:

const getNumber = Object.prototype.getNumber;
Object.prototype.getNumber = function() {
  const result = getNumber();
  return result + 1;
};

Но изменение собственного прототипа не является хорошей практикой, особенно Object.prototype, поскольку это влияетслишком много вещей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...