Что приятно, так это то, что функции являются первоклассными объектами, так что вы можете добавлять к ним методы. Тогда вашей основной функции создания экземпляра просто нужно проверить и убедиться, что она вызвана как экземпляр:
var bm = function(settings) {
if (!(this instanceof bm)) {
return new bm(settings);
}
// Now we are sure we are working with
// a new instance. Let's do stuff here
// to our new object.
}
bm.setup = function(settings) {
return new bm(settings);
}
Это можно назвать любым из следующих способов:
var myObj = new bm();
var myObj = new bm(settings);
var myObj = bm();
var myObj = bm(settings);
var myObj = bm.setup(settings);