Class 的 基本语法
-
constructor
方法constructor()
方法是类的默认方法,通过new
命令生成对象实例时,自动调用该方法。一个类必须有constructor()
方法,如果没有显示定义,一个空的constructor()
方法会被默认添加。constructor()
方法默认返回实例对象(即this
)class Point {} // 等同于 class Point { constructor(){} }
-
静态方法
① 类相当于实力的原型,所以在类中的方法,都会被实例继承。如果在一个方法前,加上一个
static
关键字,就表示该方法不会被实例所继承,而是直接通过类来调用,这成为“静态方法”。class Foo { static hello() { return 'hello' } } Foo.hello(); // hello const foo = new Foo(); foo.hello(); // is not a funtion
② 父类的静态方法,可以被子类继承
class Foo { static hello(){ return 'hello' } } class Zero extend Foo {} Zero.hello(); // hello
-
实例属性的新写法
实例属性除了定义在
constructor()
方法里面的this
上面,也可以定义在类的最顶层。这样写法的好处是,所有实例对象自身的属性都定义在类的头部,看上去比较整齐,一眼就可以看出这个类有哪些实例属性
class Foo { count = 0; get value() { return this.count; } increment(){ this.count++; } }
-
静态属性
静态属性指的是
Class
本身的属性, 及Class.propName
, 而不是定义在实例对象(this
)上的属性。class MyClass { static myStatic = 42; constructor(){ console.log(MyClass.myStatic); } }
-
public
public
是默认的访问控制符,不给属性和方法写访问控制符,默认是public
。
添加了public
的属性和方法可以在类的内部和类的外部被访问到。class Person { public name; public eat(){ console.log('i am eating'); console.log(name); // public 修饰的属性在类的内部可以被访问到 } } const person = new Person(); person.name = "s"; // public 修饰的属性在类的外部也可以被访问到。 person.eat();
-
prvate
添加了
private
的属性和方法只能在类的内部被访问到,如果在类的外部访问会报错。class Person { private name; private eat(){ console.log(name); // private 修饰的属性只能在类的内部被访问到 } }
-
protected
添加了
protected
的属性和方法只能可以在类的内部和子类被访问到。class Person { protected name; protected eat(){ console.log(name); // protected修饰的属性在类的内部被访问到。 } }