es6 class类实例、静态、私有方法属性笔记
实例属性、方法 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()); } }