工厂功能效率

问题描述 投票:1回答:1

我一直看到这样的工厂功能的例子。

const dog = () => {
 const sound = 'woof'
 return {
  makeSound: () => console.log( sound )
 }
}

const poodle = dog()
poodle.makeSound() // woof

但是这样一来,每创建一个狗,都会在内存中多创建一个makeSound函数.如果函数是在创建的对象外部,只是让对象像这样传递给声音函数,是不是会好很多?

const dog = () => {
 return {
  sound: 'woof'
 }
}

const makeSound = obj => console.log( obj.sound )

const poodle = dog()
makeSound( poodle ) // woof

把函数放在工厂函数创建的每个对象内,和把它放在外面,然后把你要运行函数的对象传给它有什么好处?

javascript function javascript-objects factory factory-pattern
1个回答
1
投票

其优点是 开发商的清晰度makeSound() 是特定的东西 Dogs.

假设你不知道函数的定义。

的代码。

makeSound(arg);

是有效的 任何 参数。或者没有,就像它一样(那么它就会被认为是 undefined).

没有什么能阻止开发人员调用

const myUnrelatedObject = { foo: "bar" };
makeSound(myUnrelatedObject); // compiles and returns no error (will just print "undefined")

而 "面向对象 "的方式会抛出一个 运行时错误

myUnrelatedObject.makeSound(); // TypeError: makeSound is not a function

代码良好实践模式是为人类开发者而生的!


但你说的没错,有一个开销。而这对于很多语言来说都是一样的,说到面向对象的模式。

如果这实际上对性能有冲击的 你的 应用程序,你可以而且应该考虑在内存和可读性(以及软件维护成本)之间进行权衡。

但作为 "默认",我强烈建议(为了你、你的同事和你的公司)你选择以下路径 可读性维护性 第一。

另外,请记住,你应该真正衡量在真实情况下的性能影响。现在的JavaScript编译器引擎可以很好地优化代码,特别是如果它是以一种通常的、可预测的方式编写的。

© www.soinside.com 2019 - 2024. All rights reserved.