我不明白Chalk (NodeJS模块)语法是如何工作的(这让我很困扰)。我到处寻找答案,但我没有任何运气,很可能不知道我需要寻找什么技术术语。我试过在StackOverflow、“方法链接”、“原型”等网站上查找粉笔相关的问题。我试过查看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
如何同时成为一个属性和一个函数?
任何帮助都将是非常感谢的。无论这是一个完整的解释,还是朝着正确的方向推进。
发布于 2021-07-15 04:46:58
粉笔可能使用吸气器和策划人来“调用”适当的函数。下面是正在发生的事情的一个简单示例:
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
}
});
基本上,它只是常规的方法链接,但是使用吸气器使它变得漂亮!另一个技巧是使基对象成为一个函数,而不是一个常规对象,这样您返回的this
就可以调用。
现在你可以:
a.b.c.b.d('hello'); // prints <B><C><B><D>hello
发布于 2021-07-15 04:43:53
我的主要问题是:
chalk.blue
如何同时成为一个属性和一个函数?
在Javascript中,函数是一个对象,因此除了可以作为chalk.blue()
调用之外,它还可以具有属性(如chalk.blue.bgRed
)。
例如,您可以这样做:
function callMe() {
console.log("callMe");
}
callMe.greeting = "hello";
callMe();
console.log(callMe.greeting);
然后,对于不确定链,可以使用getters
创建无限的对象链。
https://stackoverflow.com/questions/68387483
复制相似问题