Основная механика chain-нинга в том чтобы каждый метод возвращал такой объект, у которого можно вызвать методы (по этому принципу работает jQuery, например). Простая демонстрация механики:
function counter(initial) {
let val = initial || 0
return {
inc() {
val += 1
return this
},
dec() {
val -= 1
return this
},
val() {
return val
}
}
}
var i = counter(10)
i.inc().inc().dec().val()
Соответственно придумывай как использовать такую механику чтобы решить твою задачу.
Метод distinct вернул такой тип данных, у которого нет метода divide.
Две проблемы. Сама идея реализации не сработает. Из-за того что возвращаемое значение - это не функция, которую можно вызывать.
При этом реализация не работает как хотелось бы из-за того что в прототип записывается функция с “закрепленным” контекстом “this” (стрелочная функция). Нужно писать function, тогда в this будет строка.
String.prototype.withBold = function () {
return `<b>${this}</b>`
}
'lol'.withBold()
Такая запись просто невалидна. this - это не место куда можно записать новое значение (только если this ссылается на какое-то место, как с объектами, то в то место можно записать новое свойство. В твоем случае this это примитив, и с ним работает передача данных по значению а не по ссылке).