Давайте сначала реализуем его как обычный объект, а затем добавим несколько других синтаксисов:
var log = {};
log.write = function() {
// stuff...
return this;
};
log.print = function() {
// stuff...
return this;
};
log.reset = function() {
// stuff
return this;
};
Поскольку функция также является объектом, она может иметь свойства, поэтому вы можете заменить var log = {};
функцией, которая вместо этого перенаправляет на log.write
.
function log() {
return log.write.apply(log, arguments);
}
Наконец, для синтаксиса самосброса вы можете обнаружить новый экземпляр, но вместо создания нового объекта вы сбрасываете журнал и возвращаете тот же объект обратно!
Так что теперь функция журнала будет выглядеть так:
function log() {
if (this instanceof log) {
return log.reset.apply(log, arguments);
}
return log.write.apply(log, arguments);
}
Вы можете посмотреть на jsFiddle , чтобы убедиться, что он работает. Предупреждение: много предупреждений на этой странице!