實例屬性、方法 class Foo { valueA = 100 //第一種實例屬性定義,位置:new的實例上 constructor() { this.valueB = 200 //第二種實例屬性定義,位置:new的實例上 } methodA() { //實例方法,位置:Foo.prototype this.valueC = 300 } } let foo = new Foo() foo Foo {valueA: 100, valueB: 200} foo.methodA() //foo.methodA === foo.__proto__.methodA === Foo.prototype.methodA foo Foo {valueA: 100, valueB: 200, valueC: 300}
靜態屬性、方法 不會被實例繼承,可以被子類繼承。直接通過類來調用 直接類.屬性(Foo.valueA)的方式,實質是調用Foo / Foo.prototype.constructor的屬性 class Foo { static valueA = 100 //靜態屬性,位置:類本身,Foo / Foo.prototype.constructor上 //Foo.valueA = 1; 也可以這樣定義靜態屬性 static methodA() { //靜態方法,位置:類本身,Foo / Foo.prototype.constructor上 this.valueC = 300 //this => 類 } } class Bar extends Foo { }
私有屬性、方法 只能在類的內部使用(this.#count) class Foo { #a; #b; constructor(a, b) { this.#a = a; this.#b = b; } #sum() { return #a + #b; } printSum() { console.log(this.#sum()); } }