Это очень зависит от варианта использования.Вопрос здесь заключается в том, где находится принятие решения?
Если ваша задача - решить, какой метод-прототип использовать для создания экземпляра нового объекта?Или вы хотите, чтобы вызывающая сторона решала, какой метод-прототип использовать?Эти вопросы должны быть заданы и продуманы при разработке приложения, а обязанности должны быть распределены на основе разногласий по проекту.
Возьмем, к примеру, простое дополнение:
1 + 1 //=> 2
1 + '1' //=> '11'
В приведенном выше случаепринятие решений лежит на внутренних органах.Я не могу предоставить тип объекта для возврата.Единственная ответственность, которую я несу - это предоставление правильных объектов.Вы можете сравнить это с вымышленным вариантом:
1.add(1, Number) //=> 2
1.add('1', Number) //=> 2
1.add(1, String) //=> '11'
Ни то, ни другое не является правильным или неправильным.