Возвращает значение номера из метода на номер.прототип?

Прежде чем перейти к деталям вопроса, я уже полностью осведомлен об изменении встроенных прототипов. Этот код написан в typescript.

Хорошо, поэтому я прибегаю к проблеме, когда я пытаюсь вернуть значение числа из метода на Number.прототип.

Вот определение по номеру.прототип:

Object.defineProperty(Number.prototype, 'tap', {
  value: function numberTap (fn: (t: number) => void): number {
    fn.call(null, this.valueOf());
    return this.valueOf();
  }
});

и тест, который я запускаю:

describe('Number.prototype.tap((value:number) => void): number', () => {
  it('is defined', function () {
    expect(Number.prototype.tap).to.be.a('function');
  });

  it('returns the same value as its entry point in the method chain', () => {
    expect((1).tap(n => 5)).to.equal(1);
  });
});

Это не равно 1но [Number 1]. Если я позвоню[Number 1].valueOf(), то он возвращается 1. Я уже звонюthis.valueOf(), когда возвращаюсь из tap. Все знают, что здесь происходит.

2 ответа

  1. Просто попробовал следующее:

    Object.defineProperty(Number.prototype, 'tap', {
      value: function numberTap(fn) {
        fn.call(null, this.valueOf());
        return this.valueOf();
      }
    });
    
    typeof (1).tap(function(){})
    

    и он работает просто отлично.

    Введите описание изображения здесь

  2. Я понял это. I was missing a require that defined Number.прототип.нажмите и имел объект.прототип.нажмите уже определено, поэтому это вызвало эту проблему.