ES6的Class语法中的静态属性 - pod4g/tool GitHub Wiki

ES6中可以定义静态方法,但是不能直接定义静态属性(ES7已经提了关于静态属性语法的草案)。

可以使用下列方法来模拟

1. 使用静态getter


class DB {
 static get pool () {
   return DB.initPool()  
 }

 static initPool () {
   return mysql.createPool(dbConfig)
 }
}

2. 在类定义完毕之后赋值

class DB {
 static initPool () {
   return mysql.createPool(dbConfig)
 }
}
DB.pool = DB.initPool()

3. 使用ES7最新的静态属性语法(目前还是草案,但可用babel编译)

 class DB {
   static pool = DB.initPool()
   static initPool () {
     return mysql.createPool(dbConfig)
   }
 }

4. 上述几种方式的区别

第1种方式与第2、3种方式是有区别的,第1种方式,在每次使用DB.pool时,getter函数都会执行,所以会导致每次调用含有DB.pool的方法时,都会导致初始化一个新的连接池,这显然不是我们想要的。而第2、3中则只会在执行一次,大多数情况我们要的是执行一次的效果,java也是执行一次的。

参考:http://blog.csdn.net/qq_30100043/article/details/53542966