【发布时间】:2019-12-18 12:17:06
【问题描述】:
第一种方式:
const logger = () => ({
log(msg) {
console.log(msg)
}
})
class Component {
constructor() {
Object.assign(this, logger())
}
}
第二种方式:
const logger = {
log(msg) {
console.log(msg)
}
}
class Component {
constructor() {
Object.assign(this, logger)
}
}
现在,两者有什么区别?
const obj = new Component()
obj.log('what is the difference?')
我在人们的代码中多次看到第一个模式。这种 IFFE 模式有名称吗?我们在什么场景下使用这种模式?
我将其简化为第二段代码,仍然有效。它似乎工作相同?
【问题讨论】:
-
除非对象的属性被更改,否则我认为第一个
logger没有多大意义,只是声明一个对象文字(第二种方式)更容易 -
我称之为工厂函数。
-
不同之处在于之前的
logger对象将始终是唯一的。如果你在某处修改它可能很重要。 -
我不确定你在问什么——区别很明显;你是在问为什么你会使用第一个?您可以使用第一种形式来传递一个记录器实例唯一的参数,例如使用它的组件的名称,可以关闭并在所有后续记录消息中使用。