我有一個Java背景,我正在嘗試構建一個Node JS庫。 我有這樣的Java類;節點JS,靜態函數/變量最佳實踐
public class MyClass {
static List<String> myList = initMyList();
private String something;
public MyClass(String something) {
validate(something);
this.something = something;
}
public static String doSomething(String something) {
return doSomethingWithMyList(something);
}
public String doSomething() {
return doSomething(something);
}
private static String doSomethingWithMyList (String something) {
// do something with list ..
return something
}
}
正如你所看到的,它有一個靜態輔助方法static String doSomething
需要字符串PARAM和非靜態函數String doSomething
使用實例變量,something
。
所以用戶可以做MyClass.doSomething(string)
或MyClass m = new MyClass(sting); m.doSomething()
。前者不會進行驗證,但後者會在構造函數中進行驗證。
我想在節點JS中做到這一點。我有這個。
// construction function
function MyClass(something) {
validate(something);
this.something = something;
}
// static variable
MyClass.myList = someModule.getList();
// static function
MyClass.doSomething = function doSomething (something) {
return something;
};
// private static
MyClass._doSeomthingWithMyList = function _doSeomthingWithMyList (something) {
// do something wiht list
return something;
};
MyClass.prototype.doSomething = function doSomething() {
MyClass.doSomething(this.something);
};
module.export = MyClass;
由於我是新的節點JS世界,我想確保這是正確的方式來實現類與靜態和非靜態方法。
在現代版本的node.js中,您可以使用['class關鍵字'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes)來定義類。您不再需要直接操作原型。而且,您可以使用['static'關鍵字](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/static)來定義靜態方法。 – jfriend00