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