gpt4 book ai didi

javascript - 工厂功能效率

转载 作者:行者123 更新时间:2023-12-01 16:25:43 26 4
gpt4 key购买 nike

我见过这样的工厂函数示例,

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

在工厂函数创建的每个对象中都包含函数与在外部将其传递给要运行该函数的对象相比有什么优势?

最佳答案

优点是开发人员清楚 makeSound()Dog 特有的东西。

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

代码:

makeSound(arg);

对于 javascript 中的任何参数都是有效的。或者没有,碰巧(那么它将被视为 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 编译器/引擎可以非常擅长优化代码,尤其是当代码以通常的、可预测的方式编写时。

关于javascript - 工厂功能效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62001308/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com