前言:
類相當於實例的原型, 所有在類中定義的方法, 都會被實例繼承。
主體:
如果在一個方法前, 加上static關鍵字, 就表示該方法不會被實例繼承, 而是直接通過類來調用, 這就稱為“ 靜態方法”。
但是注意父類的靜態方法,也會被子類繼承

注意:當用實例調用時會報錯
TypeError: dad.habit is not a function
(2)靜態方法也可以從super對象上調用


(3)靜態屬性
靜態屬性指的是 Class 本身的屬性, 即Class.propname, 而不是定義在實例對象( this) 上的屬性

上面的寫法為Foo類定義了一個靜態屬性prop。
目前, 只有這種寫法可行, 因為 ES6 明確規定, Class 內部只有靜態方法, 沒有靜態屬性

(4)類的實例屬性
ES7 有一個靜態屬性的提案, 目前 Babel 轉碼器支持。這個提案對實例屬性和靜態屬性, 都規定了新的寫法。
類的實例屬性可以用等式, 寫入類的定義之中。

上面代碼中, myProp就是MyClass的實例屬性。 在MyClass的實例上, 可以讀取這個屬性。
以前, 我們定義實例屬性, 只能寫在類的constructor方法里面。

上面代碼中, 構造方法constructor里面, 定義了this.state屬性。
有了新的寫法以后, 可以不在constructor方法里面定義。
這個新寫法大大方便了靜態屬性的表達

小結:
上面代碼中, 老寫法的靜態屬性定義在類的外部。 整個類生成以后, 再生成靜態屬性。
這樣讓人很容易忽略這個靜態屬性, 也不符合相關代碼應該放在一起的代碼組織原則。
另外, 新寫法是顯式聲明( declarative), 而不是賦值處理, 語義更好。
.
