Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在不调用链中的每个方法的情况下构造流体api_Javascript - Fatal编程技术网

Javascript 如何在不调用链中的每个方法的情况下构造流体api

Javascript 如何在不调用链中的每个方法的情况下构造流体api,javascript,Javascript,在类似中提供的流体API中,它们使您能够将方法链接在一起 chalk.red.bgYellow('string') 这些方法也可以单独使用: chalk.red('string') 没有括号我们怎么能把这些串在一起呢。我意识到每个方法都将返回对象,其中包含所有这些属性和方法。我只是不明白它们怎么能既是一个方法,又是一个有方法的对象 我已经看过了粉笔的源代码,但目前我还没有找到它。我认为这可能就是它的实现方式。 本质上,在内部成员对象上有getter。它们改变了对象的状态,同时也返回了构造函数本身

在类似中提供的流体API中,它们使您能够将方法链接在一起

chalk.red.bgYellow('string')

这些方法也可以单独使用:

chalk.red('string')

没有括号我们怎么能把这些串在一起呢。我意识到每个方法都将返回对象,其中包含所有这些属性和方法。我只是不明白它们怎么能既是一个方法,又是一个有方法的对象


我已经看过了粉笔的源代码,但目前我还没有找到它。

我认为这可能就是它的实现方式。 本质上,在内部成员对象上有getter。它们改变了对象的状态,同时也返回了构造函数本身

然后,我们向构造函数的原型对象添加方法(或通过es6类语法sugar),这些方法设置内部对象的状态,同时还调用该对象上的方法(
log()
)。这些方法还设置内部对象的状态

这肯定会更干净,但我认为这就是在实践中实现这类功能的方式

如果有人有任何想法,请告诉我

需要注意的是:最初我是从构造函数中返回
chk
对象。当然,这不起作用,因为我们的构造函数上没有原型对象,这意味着我不能向它添加方法。这是一种连续返回构造函数,并从原型上的方法访问内部对象状态的情况

const Chalk=函数(){
常数this=this
this.chk={
变红(){
this.color='red'
把这个还给我
},
变蓝(){
this.color='blue'
把这个还给我
},
获取黄色(){
this.bg='yellow'
把这个还给我
},
获取蓝色(){
this.bg='blue'
把这个还给我
},
日志(msg){
this.msg=msg
console.log(`color:${this.color}\nbg:${this.bg}\nmsg:${this.msg}
`)
}
}
}
Chalk.prototype.red=函数(msg){
this.chk.color='red'
this.chk.log(msg)
}
Chalk.prototype.blue=函数(msg){
this.chk.color='blue'
this.chk.log(msg)
}
常量粉笔=新粉笔().chk

chalk.bgYellow.blue('test')
任何函数都是JavaScript中的对象,并且可以具有您分配给它的任何属性。请注意,在
chalk.red.bgYellow
中,
red
实际上没有被调用。那么red本身就是一个构造函数吗?不,它只是一个方法。也许属性是动态创建函数的getter,或者它只是静态分配的,我不知道。