2015-11-05 43 views
2

我是JavaScript的新手,我有一個想法,創建類(函數),我知道它如何在JS(原型等),但我需要在數據庫中執行諸如增加Id的操作。自動增加對象ID JS構造函數(靜態方法和變量)

我的想法是創建靜態方法,我認爲閉包在這裏很適合,每當創建新對象時,都應該返回遞增的id。

我不知道什麼是正確的方式來實現,或者這可能是不好的做法。

請提供一個簡單的例子。

回答

4

關閉是一個好主意:

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} 

```

+0

謝謝你的回答!你可以請解釋第一個例子,如果我需要把一些邏輯檢查參數構造函數計數例如這樣'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

0

由於節點是單線程的,因此這應該很容易且相對安全。

我想你可以通過建設創建一個全局變量

global.counter = 0

那麼你的類可以增加它,或增量和搶值,如果你需要保持參考值時,完成這一課程已創建。

function YourClass() { 
    global.counter++; 
} 
var yc = new YourClass(); // global.counter 1 
var yc2 = new YourClass(); // global.counter 2 
+0

有任何方式來做這個函數靜態的對象(原型)例如當調用構造函數執行此方法來獲取唯一的對象ID?使用封閉例如 – fheoosghalzr

+0

@Michael Prokopowicz的答案是明顯更清潔 – dm03514