javascript - NodeJS 模块、Chalk 的链接语法是如何工作的?

标签 javascript node.js syntax chaining chalk

我不明白 Chalk 的(NodeJS 模块)语法是如何工作的(这让我很困扰)。我已经广泛搜索了答案,但我没有任何运气,并且可能不知道我需要寻找的技术术语。我已经尝试在 StackOverflow 上查找 chalk 特定的问题,“方法链接”,“原型(prototype)”等。尝试查看 Chalk 的源代码,但似乎仍然无法找到我的答案。有问题的语法是:

// Code snippet from the Chalk NPM Page.
log(chalk.blue.bgRed.bold('Hello world!'));
log(chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz'));

我熟悉方法链,也熟悉在对象中存储函数。我的主要问题是:chalk.blue 如何同时成为属性和函数?

任何帮助将非常感激。无论是完整的解释还是朝着正确方向的插入。

最佳答案

Chalk 可能正在使用 getterssetters “调用”适当的功能。以下是正在发生的事情的一个简单示例:

let a = function (txt) {
    console.log(a.buffer + txt);
    a.buffer = ''
}

a.buffer = '';

Object.defineProperty(a,'b',{
    get: function(){
        this.buffer += '<B>';
        return this
    }
});

Object.defineProperty(a,'c',{
    get: function(){
        this.buffer += '<C>';
        return this
    }
});

Object.defineProperty(a,'d',{
    get: function(){
        this.buffer += '<D>';
        return this
    }
});

基本上它只是常规方法链接但使用 getters使它花哨!另一个技巧是使基础对象成为 Function 而不是常规对象,这样您返回的 this 就可以调用了。

现在您可以:

a.b.c.b.d('hello'); // prints <B><C><B><D>hello

关于javascript - NodeJS 模块、Chalk 的链接语法是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68387483/

相关文章:

javascript - Jquery 换行符替换为 br 标签不起作用?

node.js - Sequelize- Try block 不会捕获 model.create() 错误

javascript - 如何通过 REST 使用 Kinvey 执行 'Hello World'?

javascript - 在 iPad 上执行 playVideo() 命令后,YouTube iFrame API 在缓冲状态下挂起

javascript - 加载本地html文件到div

node.js - Express.js+蒙戈: TypeError: Cannot read property then of undefined

javascript - Node.js Socketio 和动态内容

Haskell 语言报告 : definition of reservedid

java - 在这个简单的例子中替代 if 语句

Javascript 方法语法 - lowerUpper 格式的正确术语