Javascript &引用;“静态法”;vs";“对象属性方法”;

Javascript &引用;“静态法”;vs";“对象属性方法”;,javascript,ecmascript-6,Javascript,Ecmascript 6,这两者在性能方面有什么区别: 第1版: export default class User { static getList(data) { ... } static getItem(data) { ... } } export default { getList(data) { ... }, getItem(data) { } ... } 这是: 第2版: export default class User { stat

这两者在性能方面有什么区别:

第1版:

export default class User {

  static getList(data) {
   ...
  }

  static getItem(data) {
   ...
  }

}
export default {

  getList(data) {
   ...
  },
  getItem(data) {
  }
  ...

}
这是:

第2版:

export default class User {

  static getList(data) {
   ...
  }

  static getItem(data) {
   ...
  }

}
export default {

  getList(data) {
   ...
  },
  getItem(data) {
  }
  ...

}
两者都被直接称为:

import User from "./User";
User.getList(data); // by static method (version 1)
User.getList(data); // by object property method (version 2)
那么区别在哪里呢

  • 静态方法(“版本1”)是否只创建一次,而另一个对象(“版本2”)是否在每次调用时都被克隆(?)
  • 类是否有对象没有的开销
  • 其他事情

静态方法只是构造函数函数对象的属性。因此,区别在于,在第一种情况下,您创建的是函数对象(构造函数),而在第二种情况下,您创建的是“普通”对象。即,简化:

var firstExample = Object.assign(function() {}, {
  getList() {},
  getItem() {},
});
var secondExample = Object.assign({}, {
  getList() {},
  getItem() {},
});
你应该使用清楚代码意图的东西。如果你永远不会实际实例化
User
,那么你就不应该使用类来实现这一点


静态方法(“版本1”)是否只创建一次,而另一个对象(“版本2”)是否在每次调用时都被克隆(?)

否。在这两种情况下,方法只创建一次

类是否有对象没有的开销


可能吧。创建“类”比创建对象需要更多的步骤。但是,这不会对应用程序产生任何实际性能。

在这些方面没有区别。如果你制作一个类只是为了把静态的东西放在上面——不要。类用于JavaScript中的实际类型。区别在于v2不是类。考虑到纯静态类是反模式的,这可能是正确的选择。