gpt4 book ai didi

javascript - 将对象作为函数调用?

转载 作者:行者123 更新时间:2023-11-28 04:49:40 25 4
gpt4 key购买 nike

可能我正在重新发明轮子,但我正在尝试通过着色为自己创建一个漂亮的记录器。

这个想法是能够从我的组件中要求这个记录器,并在要求它时向它传递一些名称,这样,如果我从组件调用记录器,它将输出一个名称该组件的(或我将其传递给的任何文本)。

所以我的模块看起来像这样:

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;

因此创建了一个记录器对象,以及几个辅助它的原型(prototype) - 这样,当我们在 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 或如果我在实例化后将字符串传递给它,则以白色输出。

我觉得应该有一个 hack 来做到这一点。

最佳答案

函数是带有特殊内部标签[[call]]的对象,这意味着它们可以作为函数调用。

在 JavaScript 中,将方法分配给函数是完全可以接受的,而且这是一种经常使用的模式。

关于javascript - 将对象作为函数调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43042459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com