おそらく、私は車輪を再発明していますが、私は着色のために素敵なロガーを自分で作成しようとしています。オブジェクトを関数として呼び出しますか?
アイデアは、このロガーを私のコンポーネントから得ることができるようにすることです。そして、私は、コンポーネントからロガーを呼び出すと、私はそれを渡すテキスト)。
だから私のモジュールは次のようになります。
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種類のコンポーネントで構成されています。
それは私がこのようにそれを使用する場合は、単に素晴らしい作品:
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
を出力する必要があります。
私はそれを行うためにハックする必要があると感じています。
関数を返し、それらに新しい 'メソッド'を割り当てることができます – alex
関数はオブジェクトです。関数はプロパティを持つことができます。 'logger'が関数である限り、これは正常に動作します。 – deceze
これはおそらく助けになるかもしれません:http://stackoverflow.com/questions/10341127/can-javascript-constructor-return-function-and-keep-inheritance –