我是JavaScript的新手,我有一個想法,創建類(函數),我知道它如何在JS(原型等),但我需要在數據庫中執行諸如增加Id的操作。自動增加對象ID JS構造函數(靜態方法和變量)
我的想法是創建靜態方法,我認爲閉包在這裏很適合,每當創建新對象時,都應該返回遞增的id。
我不知道什麼是正確的方式來實現,或者這可能是不好的做法。
請提供一個簡單的例子。
我是JavaScript的新手,我有一個想法,創建類(函數),我知道它如何在JS(原型等),但我需要在數據庫中執行諸如增加Id的操作。自動增加對象ID JS構造函數(靜態方法和變量)
我的想法是創建靜態方法,我認爲閉包在這裏很適合,每當創建新對象時,都應該返回遞增的id。
我不知道什麼是正確的方式來實現,或者這可能是不好的做法。
請提供一個簡單的例子。
關閉是一個好主意:
var MyClass = (function() {
var nextId = 1;
return function MyClass(name) {
this.name = name;
this.id = nextId++;
}
})();
var obj1 = new MyClass('joe'); //{name: "joe", id: 1}
var obj2 = new MyClass('doe'); //{name: "doe", id: 2}
或者,如果你想要一些更靈活的解決方案,您可以創建簡單的工廠:
function MyObjectFactory(initialId) {
this.nextId = initialId || 1;
}
MyObjectFactory.prototype.createObject = function(name) {
return {name: name, id: this.nextId++}
}
var myFactory = new MyObjectFactory(9);
var obj1 = myFactory.createObject('joe'); //{name: 'joe', id: 9}
var obj2 = myFactory.createObject('doe'); //{name: 'doe', id: 10}
```
由於節點是單線程的,因此這應該很容易且相對安全。
我想你可以通過建設創建一個全局變量
global.counter = 0
那麼你的類可以增加它,或增量和搶值,如果你需要保持參考值時,完成這一課程已創建。
function YourClass() {
global.counter++;
}
var yc = new YourClass(); // global.counter 1
var yc2 = new YourClass(); // global.counter 2
有任何方式來做這個函數靜態的對象(原型)例如當調用構造函數執行此方法來獲取唯一的對象ID?使用封閉例如 – fheoosghalzr
@Michael Prokopowicz的答案是明顯更清潔 – dm03514
謝謝你的回答!你可以請解釋第一個例子,如果我需要把一些邏輯檢查參數構造函數計數例如這樣'var Product = function Product(){this.name =「」; this.amount =「」; this.price =「」; this.picture =「」;如果(arguments.length == 4){this.name = arguments [0]; this.amount = arguments [1]; this.price = arguments [2]; this.picture = arguments [3]; } };' 我應該把這個邏輯放在返回函數裏面嗎? – fheoosghalzr