可能我正在重新发明一个轮子,但我正在尝试为自己创建一个漂亮的记录器并着色。
我的想法是能够require
来自我的组件的这个记录器,并且不要求它传递给它一些名称,这样如果我从组件调用记录器,它将输出该组件的名称(或者我传给它的任何文字)。
所以我的模块看起来像这样:
var chalk = require("chalk");
var JustLogger = function(name) {
this.name = name;
};
// message types
JustLogger.prototype.error = function() {
return console.log(this.greet(chalk.red) + chalk.red.apply(null, arguments));
};
JustLogger.prototype.info = function() {
return console.log(this.greet(chalk.cyan) + chalk.cyan.apply(null, arguments));
};
// coloring
JustLogger.prototype.green = function() {
return chalk.green.apply(this, arguments);
};
// utility
JustLogger.prototype.greet = function(f) {
return f(chalk.bold("[" + this.name["0"] + "]: "));
};
const _instance = function(){
return new JustLogger(arguments);
};
module.exports = _instance;
因此创建了一个记录器对象,以及一些原型来帮助它 - 这样,当我们在10个不同的组件中实例化这个记录器时,我们不会污染内存。 / p>
如果我像这样使用它,效果很好:
var logger = require(path_to_just_logger)("some name");
logger.error("this is an error message"); // outputs in red [some name]: this is an error message
logger.info("this is an info message"); // outputs in cyan [some name]: this is an info message
但是有可能做到这一点,以便也可以这样做:
var logger = require(path_to_just_logger)("some name");
logger.error("this is an error message"); // outputs in red [some name]: this is an error message
logger.info("this is an info message"); // outputs in cyan [some name]: this is an info message
logger("this is default message"); // should output `[some name]:this is default message` with no colors
这里的想法是,如果需要,记录器可以通过调用适当的方法输出特殊类型的消息,如.error
或.info
,但它应该只做一个简单的console.log
或输出如果我在实例化后只是将字符串传递给它,则为白色。
我觉得应该有一个黑客去做。
答案 0 :(得分:0)
函数是具有特殊内部标记[[call]]
的对象,这意味着它们可以作为函数调用。
在JavaScript中将方法分配到函数上是完全可以接受的,并且它是经常使用的模式。