Javascript 为什么在函数中包装对象初始化?

Javascript 为什么在函数中包装对象初始化?,javascript,api-design,Javascript,Api Design,我见过几个API以以下方式生成对象: const newElement = Class.Object(<object> optionsObject) 我的问题是,为什么要进行额外的步骤?它看起来像一个工厂模式,但实际上并不随外部因素而变化。初始化对象时自己使用new关键字不是更直观吗?i、 e: const newElement = new Class.Object(<object> optionsObject) const newElement=newclass.O

我见过几个API以以下方式生成对象:

const newElement = Class.Object(<object> optionsObject)
我的问题是,为什么要进行额外的步骤?它看起来像一个工厂模式,但实际上并不随外部因素而变化。初始化对象时自己使用
new
关键字不是更直观吗?i、 e:

const newElement = new Class.Object(<object> optionsObject)
const newElement=newclass.Object(optionObject)

第一个好处是,创建对象不需要
new
关键字。例如,您可以将构造函数/方法作为回调传递
ArrayOfoOptions.map(Class.Object)
将为您提供一个包含10个对象的数组,而不必为其创建一个全新的函数
(options)=>new Class.Object(options)
,它更为详细,没有真正的好处。此外,与工厂方法一样,如果您希望调整实现,它在将来提供了更大的灵活性。但是很难说设计者为什么使用这个,只是猜测而已。当静态方法进行异步初始化或有其他副作用(除了对象构造)时,这是一种常用的模式,我不认为传递调用有什么好处。你是说
新类(选项)
?您示例中的函数正在调用自身,导致堆栈溢出。啊,糟糕,我指的是new Class.options,似乎大写版本是为“default behavior”保留的。这本身给了我一些我甚至没有注意到的额外的洞察力。这种模式允许以与“常规”对象相同的方式构造单例。这样,您就不需要了解构造对象的性质。您只需始终以相同的方式构造对象。它基本上是一个抽象层
const newElement = new Class.Object(<object> optionsObject)