我读过这样的文章:
使用
prototype
将是最快的,因为声明的函数是共享的。 this article 中解释了更多详细信息与使用“即兴创作”相比,利用 JS native 原型(prototype)将提高性能。闭包应 perform worse因为它的每次创建都返回一组函数和变量的单独副本。
对象(函数)是一种闭包,但带有
this
。具有访问控制(公共(public)/私有(private))。他们是supposed to be better than closures .对象字面量(看起来像 JSON 的字面量)就像对象一样,但没有隐私感。它们与 JAVA 中的静态方法相当。我没有文章可以引用,我只是为了比较而收录了这个。
我是testing a simple comparison of the 4 methods using jsperf在我继续我的项目之前构建“类”,我期待原型(prototype)获胜。然而,闭包打败了他们。怎么会?这里有一些让步吗?看不见的偏见?
我可能不是 JS 新手,但我对这些优化概念完全陌生,请耐心等待。我还在研究这些东西。
最佳答案
并不是说“闭包应该表现更差”。闭包导致每个对象都获得自己的函数副本。但只要您有足够的内存,就不会导致任何真正的性能问题。如果有的话,闭包甚至可能更快,因为它们不必沿着原型(prototype)链向上寻找属性,它们总是在对象的第一层。
闭包真正的缺点是内存使用,而不是速度。当创建大量对象时,它可能会成为一个问题。
您还必须考虑相关的运行时。不同的 JavaScript 引擎会针对不同的情况进行优化,具体取决于他们认为最重要的内容。
关于测试 "Class"的不同仿真的 Javascript 基准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9270665/