Подтвердить что ты не робот

Метод Set.prototype.add вызывается несовместимым приемником undefined

Я просто не могу понять, почему он дает эту ошибку.

Вот что я тестировал на своей консоли Chrome:

>    var mySet;
<-   undefined

>    mySet = new Set;
<-   Set {}

>    mySet.add('foo', 'bar', 'baz')       // Worked as expected
<-   Set {"foo"}                          // just the first argument was added

>    ['bar', 'baz'].forEach(mySet.add)
X->  VM1529:1 Uncaught TypeError: 
         Method Set.prototype.add called on incompatible receiver undefined(…)

Спасибо заранее.

4b9b3361

Ответ 1

В этом случае метод add теряет свой внутренний контекст this когда вы передаете его как обратный вызов, поэтому вам нужно использовать bind:

['bar', 'baz'].forEach(mySet.add.bind(mySet));

или же

['bar', 'baz'].forEach((item) => mySet.add(item));