Если вы имеете в виду «хорошая практика или плохая практика», вот мое мнение:
С положительной стороны, вы получите синтаксический сахар.
С другой стороны, вы отказываетесь от значимых возвращаемых значений в пользу возможности объединения. Что на самом деле неосуществимо, потому что в конечном итоге вам понадобятся методы, которые возвращают что-то отличное от базового объекта, так что в итоге вы получите несколько методов, которые могут быть цепочечными, а некоторые - нет (пользователям ваших классов будет весело угадывать, какие который.)
Или вы идете полным ходом и делаете все из них цепочечными, несмотря ни на что, но затем вы попадаете в нелепые ситуации, такие как возвращение поддельного «пустого» объекта ради сохранения цепочки, какой объект нужно проверить какое-то неясное свойство, чтобы определить, является ли оно «реальным» или просто звеном в цепочке.
Классическим примером является jQuery, который демонстрирует все признаки: базовый объект пытается быть единственной базовой единицей данных в коде (все возвращает объект jQuery); тестирование поддельных объектов (if (obj.length)
); плюс внутреннее противоречие, в котором все еще нужно нарушать цепочечность для таких методов, как getAttribute()
, которые возвращают строку.
ИМХО, это ужасный беспорядок, чтобы что-то делать только ради этого синтаксического сахара.