Точно также как это сделано в jQuery только со своим набором методов.
Как это можно сделать с минимальным количеством строк и, возможно, с es6 классами?
p.s. Прошу не предлагать готовые решения, пересмотрел их кучу и не понимаю, как это работает (а я хочу именно понять, как это работает в первую очередь), прошу привести короткий кусок кода, который это реализует с пояснениями.
Смотрите, допустим, у меня есть метод find, который просто является обёркой над querySelector и я хочу использовать вот такой синтаксис: life( selector ).doSomething().doSomethingElse().
При каждом новом вызове life внутри возвращаемого объекта селектор должен устанавливаться из параметра selector. При такой реализации как у вас так не получается.
Упёрся в то, что у возвращаемого объекта цепочки отсутствуют необходимые свойства и методы, т.е. если мне нужно, например, у input получить value, то я не могу сказать life( input ).value вместо этого нужно писать life( input ).el.value что не очень удобно, так как на этом цепочка обрывается. Выходит что нужно руками перегружать все необходимые методы.