"静态方法" vs"对象属性方法"

时间:2018-01-13 14:02:36

标签: javascript ecmascript-6

与此之间的绩效有何不同:

版本1:

export default class User {

  static getList(data) {
   ...
  }

  static getItem(data) {
   ...
  }

}

和此:

版本2:

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")每次被调用时都被克隆(?)?
  • 该类是否具有对象不具有的开销?
  • 其他事情?

1 个答案:

答案 0 :(得分:2)

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

var firstExample = Object.assign(function() {}, {
  getList() {},
  getItem() {},
});
var secondExample = Object.assign({}, {
  getList() {},
  getItem() {},
});

您应该使用能够明确代码意图的内容。如果你永远不会真正实例化User那么你就不应该使用一个类。

  

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

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

  

该类是否具有对象不具有的开销?

可能。创建“类”涉及比创建对象更多的步骤。但是,这不会对您的应用程序产生任何真正的影响。