Tre*_*vor 2 javascript syntax chaining node.js chalk
我不明白 Chalk 的(NodeJS 模块)语法是如何工作的(这让我很困扰)。我已经广泛寻找答案,但我没有任何运气,并且可能不知道我需要寻找的技术术语。我尝试在 StackOverflow、“方法链接”、“原型”等上查找 chalk 特定的问题。尝试查看 Chalk 的源代码,但似乎仍然无法找出我的答案。有问题的语法是:
// Code snippet from the Chalk NPM Page.
log(chalk.blue.bgRed.bold('Hello world!'));
log(chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz'));
Run Code Online (Sandbox Code Playgroud)
我熟悉方法链并熟悉在对象中存储函数。我的主要问题是:如何chalk.blue同时成为属性和函数?
任何帮助将不胜感激。无论是完整的解释还是朝着正确的方向推动。
Chalk 可能使用getter和setter来“调用”适当的函数。以下是所发生情况的简单示例:
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
}
});
Run Code Online (Sandbox Code Playgroud)
基本上它只是常规的方法链接,但使用getter使其变得更奇特!另一个技巧是使基础对象成为 Function 而不是常规对象,以便this您返回的内容变得可调用。
现在你可以这样做:
a.b.c.b.d('hello'); // prints <B><C><B><D>hello
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
356 次 |
| 最近记录: |