2013-10-15 173 views
0

這是構造函數:方法 - 靜態成員

function Foo() { 
    this.id = 0; 
} 

我的 「類」 創建方法在這裏:

Foo.id = function() { 
    return id form Product + 1; // pseudocode 
} 

Foo.id() // 1 
Foo.id() // 2 

嗯,我想在構造函數中調用方法ID()而不創建Foo實例,其中id()方法訪問公共成員id​​並將其設置爲id + 1.另外,當我創建實例時,在創建實例時調用id方法並設置id成員。首先是關閉我。任何幫助將不勝感激,並鏈接進一步閱讀。

我打算以後創建的Foo實例,這裏是模板:

var myFoo = new Foo({ 
    title: "titlevalue", // string 
    price: n // ni is integer 
}); 

我想,每個實例也有id屬性,這是在實例生成的,因爲在構造函數中默認屬性ID 。

+1

[相關](http://stackoverflow.com/questions/7694501/class-靜態方法合的JavaScript/7694583#7694583)。 – zzzzBov

+1

「* public member'id' *」是什麼意思? 'this.id'是實例的屬性,所以如果不創建一個實例就不能設置它(除非你的意思是將它設置在原型上,它將應用於所有實例 - 包括尚未創建的實例) – Bergi

+0

@Bergi我犯了一個錯誤。是的,this.id是實例的屬性,但我也想設置一些默認值,然後在實例化或在類上調用方法時增加它。 –

回答

2

函數是一個對象。在你的函數中放置第二個屬性。

Foo.currentId = 0; 

Foo.id = function() { 
    return ++Foo.currentId; 
}; 

如果你堅持使它「私人」,你可以在函數內部創建一個功能:

Foo.id = (function() { 
    var id = 0; 

    return function() { 
     return ++id; 
    }; 
})(); 
+0

這裏有什麼是'Foo'?看起來像一個物體。 – Madbreaks

+0

@Madbreaks:是的。 – Ryan

+0

但是op說:「我想在構造函數上調用方法id()而不創建Foo的實例」。我試圖圍繞這個問題回答我的問題,而不是懷疑你的答案。 – Madbreaks