是否可以编写这样的 JavaScript 日志类?

Sou*_*ter 5 javascript design-patterns

我想编写一些可以像下面代码一样使用的日志类。

// short-hand for logging.
log('log message', [other parameter]);

// full path for writing log.
log.write('log message', [other parameter]);

// print all log
log.print([optional parameter]);
Run Code Online (Sandbox Code Playgroud)

而且,它必须能够写成流畅的模式。

log.write('log message').print();
Run Code Online (Sandbox Code Playgroud)

最后,应使用以下代码对其进行重置。

log = new log();
Run Code Online (Sandbox Code Playgroud)

谢谢,

Tha*_*hai 2

让我们先将其实现为普通对象,然后添加一些其他语法:

var log = {};

log.write = function() {
    // stuff...
    return this;
};

log.print = function() {
    // stuff...
    return this;
};

log.reset = function() {
    // stuff
    return this;
};
Run Code Online (Sandbox Code Playgroud)

由于函数也是一个对象,它可以具有属性,因此您可以将var log = {};, 替换为重定向到的函数log.write

function log() {
    return log.write.apply(log, arguments);
}
Run Code Online (Sandbox Code Playgroud)

最后,对于自重置语法,您可以检测新实例,但不是创建新对象,而是重置日志并将相同的对象交还!

所以现在日志函数将如下所示:

function log() {
    if (this instanceof log) {
        return log.reset.apply(log, arguments);
    }
    return log.write.apply(log, arguments);
}
Run Code Online (Sandbox Code Playgroud)

你可以看看jsFiddle看看它是否有效。警告:该页面上有很多alert()!