MDN String.prototype.repeat polyfill - Как «this» может иметь значение null? - PullRequest
1 голос
/ 17 февраля 2020

В MDN сделать c для String.prototype.repeat полифилл имеет следующую строку кода:

if (!String.prototype.repeat) {
  String.prototype.repeat = function(count) {
    'use strict';
    if (this == null)
      throw new TypeError('can\'t convert ' + this + ' to object');

Как это может быть нулевым?

Ответы [ 3 ]

2 голосов
/ 17 февраля 2020

Вы можете использовать call или apply для выполнения функции с другим контекстом. Большинство функций JavaScript предназначены для обобщенных функций c, что означает, что они будут работать с большинством типов переменных.

String.prototype.repeat.call(1, 2); // -> "11"
String.prototype.repeat.call({}, 2); // -> "[object Object][object Object]"

Из-за этого устанавливается простая проверка, чтобы убедиться, что никто не пытается выполнить его в контексте null или undefined

String.prototype.repeat.call(null, 2); // TypeError
1 голос
/ 17 февраля 2020

Как это:

String.prototype.repeat.call()
0 голосов
/ 17 февраля 2020
const test = 'test'.repeat;
test();
...