2016-04-20 61 views
4

我最近開始打字稿和我的IDE WebStorm工作LINTED我說,我可以用static修飾符...在TypeScript的函數中使用靜態修飾符有什麼好處嗎?

export default class MyClass { 
    public bar(): any { 
     // do sth. with instance values 
    } 

    private foo(a: any, b: any): any { 
     // do sth. without instance values, like checking 
    } 
} 

在這裏我要拿到foo(a, b)可以宣佈static警告。現在我把這個「警告」關閉了,因爲我主要考慮自由使用靜態作爲「代碼嗅覺」,但是我再次不是TypeScript的專家。

使用靜態修飾符有什麼重要的「副作用」?除了它按照definition

+5

對我來說有它沒點當一個人定義的實例方法不符合(也不會)取決於實例狀態時,代碼會聞到氣味。 – Alex

回答

5

就像你提到的,使用static修改有使類成員訪問,而無需實例化類的主要好處。

使用打字稿類成員的static修飾符的一個值得注意的「副作用」是,你將無法從一個類的實例訪問該成員。

class Hamburger { 
    static beef_percentage: number = 75; 
    public tasty: boolean = false; 
} 

console.log(Hamburger.beef_percentage); // 75 
console.log(Hamburger.tasty); // Error 

var myHamburger = new Hamburger(); 
console.log(myHamburger.beef_percentage); // Error 
console.log(myHamburger.tasty); // false 

我想這在某些情況下可能有用。

從它的實例如果方法不訪問成員,我建議做這種方法靜態爲了清晰的關於你的類着想的宗旨。

+1

應該 console.log(myHamburger.beefy); // Error be console.log(myHamburger.beef_percentage); //錯誤? –

1

取決於你的實現,但是通過從原型中刪除一個項目(而不是通過原型鏈引用它)查找通常應該更快,但是這最終取決於引擎,並且我會想象會是可以忽略的。

0

如果您foo不依賴於instance屬性和更像是一個utility方法方法再有就是它添加到每個instance和更好的在一個地方在class水平

相關問題